{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1.1 例子：多项式拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设我们有两个实值变量 $x, t$，满足关系：\n",
    "\n",
    "$$t = sin(2\\pi x) + \\epsilon$$\n",
    "\n",
    "其中 $\\epsilon$ 是一个服从高斯分布的随机值。\n",
    "\n",
    "假设我们有 `N` 组 $(x, t)$ 的观测值 $\\mathsf x \\equiv (x_1, \\dots, x_N)^\\top, \\mathsf t \\equiv (t_1, \\dots, t_N)^\\top$："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n6nNuAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa79657b2d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import scipy as sp\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "# 设置 n\n",
    "\n",
    "N = 10\n",
    "\n",
    "# 生成 0，1 之间等距的 N 个 数\n",
    "x_tr = np.linspace(0, 1, N)\n",
    "\n",
    "# 计算 t\n",
    "t_tr = np.sin(2 * np.pi * x_tr) + 0.25 * np.random.randn(N)\n",
    "\n",
    "# 绘图\n",
    "\n",
    "xx = np.linspace(0, 1, 500)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "ax.plot(x_tr, t_tr, 'co')\n",
    "ax.plot(xx, np.sin(2 * np.pi * xx), 'g')\n",
    "ax.set_xlim(-0.1, 1.1)\n",
    "ax.set_ylim(-1.5, 1.5)\n",
    "ax.set_xticks([0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "ax.set_xlabel(\"$x$\", fontsize=\"x-large\")\n",
    "ax.set_ylabel(\"$t$\", fontsize=\"x-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用这 $N$ 个数据点作为训练集，我们希望得到这个一个模型：给定一个新的输入 $\\hat x$，预测他对应的输出 $\\hat t$。\n",
    "\n",
    "我们使用曲线拟合的方法来解决这个问题。\n",
    "\n",
    "具体来说，我们来拟合这样一个多项式函数：\n",
    "\n",
    "$$\n",
    "y(x,\\mathbf w)=w_0+w_1 x + w_2 x^2 + \\cdots + w_M x^M = \\sum_{j=0}^M w_j x^j\n",
    "$$\n",
    "\n",
    "其中 $M$ 是多项式的阶数，$x^j$ 表示 $x$ 的 $j$ 次方，$\\mathbf w \\equiv (w_0, w_1, \\dots, w_M)$ 表示多项式的系数。\n",
    "\n",
    "这些多项式的系数可以通过我们的数据拟合得到，即在训练集上最小化一个关于 $y(x,\\mathbf w)$ 和 $t$ 的损失函数。常见的一个损失函数是平方误差和，定义为：\n",
    "\n",
    "$$\n",
    "E(\\mathbf w)=\\frac{1}{2} \\sum_{i=1}^N \\left\\{y(x, \\mathbf w) - t_n\\right\\}^2\n",
    "$$\n",
    "\n",
    "因子 $\\frac{1}{2}$ 是为了之后的计算方便加上的。\n",
    "\n",
    "这个损失函数是非负的，当且仅当函数 $y(x, \\mathbf w)$ 通过所有的数据点时才会为零。\n",
    "\n",
    "对于这个损失函数，因为它是一个关于 $\\mathbf w$ 的二次函数，其关于 $\\mathbf w$ 的梯度是一个关于 $\\mathbf w$ 的线性函数，因此我们可以找到一个唯一解 $\\mathbf w^\\star$。\n",
    "\n",
    "$$\n",
    "\\frac{\\partial E(\\mathbf w)}{w_j} = \\sum_{n=1}^N \\left(\\sum_{j=0}^M w_j x_n^j - t_n\\right) x_n^j  = 0\n",
    "$$\n",
    "\n",
    "另一个需要考虑的拟合参数是多项式的阶数 $M$，我们可以看看当 $M = 0,1,3,9$ 时的效果（红线）。\n",
    "\n",
    "可以看到，$M=3$ 似乎是其中较好的一个选择，$M=9$ 虽然拟合的效果最好（通过了所有的训练数据点），但很明显过拟合了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nFVhocSYREXkw1WwRsYSa57+ZphkL9AaWAweAmaZpHrQ2lYg4k2EYIcBGoKBhGKcNw+hgdSaxj2q2\nSPZmeZkAACAASURBVPLjLjXbME1NGxMRERERsYdGnkVERERE7KTmWURERETETmqeRURERETspOZZ\nRERERMROap5FREREROyk5llERERExE5qnkVERERE7KTmWURERETETmqeRURERETspOZZRERERMRO\nap5FREREROzkY3UAESsZhlEQqApkAuKAKOB5YItpmtOszCYiIvdT3RarqXmWZMswDAOoZ5rmKMMw\nsgLHgJxAN+CSpeFEROQ+qtviDgzTNK3OIGIJwzC8gFSmaV43DCMQ6GyaZiOrc4mIyIOpbos70Miz\nJFumacYD1//+sj6wHMAwDF/AyzTNaKuyiYjI/VS3xR1owaAkW4ZhlDMMY5hhGP5AI2Dz30+1B3yt\nSyYiIg+iui3uQNM2JNkyDKMm0AnYBEQCRYEDwH7TNDc/6ntFRMT1VLfFHah5FhERERGxk6ZtiIiI\niIjYSc2ziIiIiIid1DyLiIiIiNhJzbOIiIiIiJ3UPIuIiIiI2EnNs4iIiIiIndQ8i4iIiIjYSc2z\niIiIiIid1DyLiIiIiNjJx+oACWEYho5DFBGPZZqmYXUGV1LNFhFP96C67VHNM4CzjxMfNGgQgwYN\ncuo9RMS9uOLn3jCSVd98l7NrNsCgGjUYVLEiDB7suIvGx4OfH9y6BT5u/E/lvn1Qrx6cPAne3gn7\n3h07oFkzOHo04d8rYiFX9WoPq9uatiEiIp4tLg58fR17TS8vSJcOrl1z7HUdbepUCApKXPNbujRk\nzgwrVzo+l0gSpuZZREQ8W3y845tngIwZ4epVx1/XUeLjITgY2rZN/DW6doVx4xyXSSQZUPP8HwEB\nAVZHEBEX08+9Zwt49lnnTK3IkAGuXHH8dR1l2zZImxaKFUv8NV57DcLD4fJlx+UScTKra7aa5/+w\n+i9ERFxPP/eeLSBbtuQ58rxwITRp8mTXSJcO6tSBuXMdk0nEBayu2WqeRUTEs8XEOKd5dveR54UL\n4eWXn/w6rVtDSMiTX0ckmVDzLCIini021nkjz+7aPB8/DufPw4svPvm16teHXbvg99+f/FoiyYCa\nZxER8WwxMc6Z8/zUU3DpkuOv6wiLFkHDho7ZYi5FCtsItqZuiNhFzbOIiHg2Z03bcOfmecUK24ix\nowQGwoIFjrueSBKm5llERDybs6ZtZM4Mf/7p+Os+qZgYWLcOXnrJcdesUwe2bnXfaSoibkTNs4iI\neLbkNm1j82bIn9/W3DtKqlS2ZjwszHHXFEmi3PjMUfF0YeHhjAoNJdr4f/buOqyrsw3g+PcAgt3d\nijp1ztZZsxUVUcwhdjd71c2atdm1ze5WbELFQMWY3S3m7JiBhTTn/eOIE2n4FXB/rstLPb8TN77v\nHm6ecz/3o2ClqjjZ22Nbt66xwxJCJDXJrWxj3z6oX1/nt71YrBhvf/uNMadPy5gtRDQkeRZ64eHl\nxU/r13OnffvPx+6sWwcgg7EQQreSY/I8ZoxOb+nh5cVvT5/i+fQpJ2xtCbC0lDFbiChI2YbQi9lu\nbuESZ4A77dszRxakCCF0TV81z1mymF7Ns6+v1lauRg2d3na2mxune/TgcuHC1D13DpAxW4ioSPIs\n9CJAUSI97m/gOIQQyYC+ap4zZYK3byEkRPf3jq+TJ6FMGa1GWYfCxmyPKlVofOrU5+MyZgsRkSTP\nQi+sVDXS4ykNHIcQIhnQV9mGhYW2fbUpbdF95AhUr67z24aN2XsqVcLm9OnPx2XMFiIiSZ6FXjjZ\n22P9qV4ujPXatQxs3txIEQkhkix9lW2A6dU9Hz2q85IN+G/MvmhtTQZfXwo+fSpjthBRkAWDQi/C\nFpjMcXXFH232YqCjoyw8EULonr7KNsC0kueQEDhxAr6amNCFz2O2uzsXs2dn0JIlWI8aJWO2EJGQ\n5FnojW3dujLwCiH0T19lG2BaG6Vcvgy5c+u2v/MXPo/Za9fScOtWkPFbiEhJ2YYQQojETZ/JsynN\nPOup3jmChg3hwAHt31UIEYEkz0IIIRK35FLzrKd65wiyZ4fChbXOHkKICCR5FkIIkbgll5rnI0cM\nkzwD2NjAnj2GeZYQiYwkz0IIIRI3fZdtmELN86NH4O8P1taGeZ4kz0JESRYMCpEMXLx4ERcXF9Kl\nS8elS5fo27cvVatWNXZYQuiGvhcMmsLM85kzUKkSRLEBlc5Vqwbe3uDjo20WIwzuzZs3jB49Gmtr\na27dukXv3r0pXbq0scMSSPIsRLLQq1cvli9fzrfffsvevXtp3Lgxd+/eJXPmzMYOTYiECw5O+mUb\np09rybOhWFpC1apw+DBIr2ejaNeuHT169KBVq1Y8fvyYOnXqcOPGDRRD/QAloiRlG0IYSWhoKBMm\nTKBo0aIUKVIk0nMePnxI4cKFqV69OhMnToz3s4KDg7lx4wYA+fPn5927d9y+fTve9xPCpCSHbhuG\nTp4B6tQBLy/DPtPEGWrcvn79Onv27KFOnToA5MmTB39/f05/sfujMB6ZeRbCSMzMzBg1ahS+vr5M\nnz6dwMBALC0tw52zf/9+3rx5w4YNG6hcuXK8n3X27NnPf75//z4pU6bkm2++iff9hDApST15VlWt\nbKNiRcM+t25d6NHDsM80cYYaty9fvgxApi9KZrJnz86RI0cS9L1A6IbMPAthROfPn6d27dpky5aN\nmzdvhvvMzc2N3LlzoygKlXQ447R8+XKmT59OhgwZdHZPIYxK32UbL19qCayx3L0LadJAzpyGfW75\n8vDgAbx4YdjnmjhDjNtfJ+QAQUFBPHnyJN73FLojM89CGNHhw4fp3bs3xYoV4+bNm5QqVQrQXtnl\nzZuXnTt3Ur9+/XA1bm/evGHw4MGoMXwzHzRoULjFJceOHcPT0xMLCwu6deumny9ICENTVf0mzylT\navW/Hz5AunT6eUZMjFGyAdq/aY0acPAgtGlj+OebKEOM25UrV8bMzIyXL1+SLVs2goODuX//Ph8+\nfNDr1yZix6SSZ0VRlgO2wL+qqn5n7HiE0Dc/Pz9SpkxJ0aJFP9ckBwYGcvHiRRwcHBg0aBBdu3YN\nd03GjBlZvnx5nJ9VrVo1qlWrxu7du6latSoHDhwI90pQiLgyiTE7NBTMzLRf+hJWumGs5NkYJRth\n6tbVdhuU5PkzQ4zbuXPnpk+fPmzbto3u3buzfft2smbNKou8TYSplW2sABoZOwghDMHX15e0adMC\nfJ7BAHBxcaF169a8f/+eU6dOYWNjo9PnNmrUiPv37zNr1iyd3lckS8Yfs/U56xzG2HXPxpp5Blk0\n+BVDjtuzZs0iICCABQsWkD17dtKnT0/58uUTfF+RcCY186yq6t+KohQ0dhyJ3v37cOkSXL0K9+7B\n69fw5o02M2NlBRkyQP78UKAAlC4NZctqx4VBHTp06PNK6mLFiuHu7s7p06cpU6YMFhYWeHl5UaRI\nEfLkyRPuOh8fH4YMGRLr138nTpygZcuWnDx5knz58gGQIkUK3r17p58vTCQbJjFmGyp5NtZGKSEh\ncP688Waey5TRap6fPIHcuY0Tgwkx1LgNsHXrVhwdHcmYMSO+vr48evSIRo1kftEUmFTyLOIpJAT2\n7gU3N+33Dx+0hR7ffqslx1myQMaMnDp3jp1HjmD59DFZbp+ltAXkffwv2R77cCdfGo58m57T5XPw\npHA28qTPS5HMRSietTjV81cna+qsxv4qk5yLFy/SpEkTAIoWLcr169d5/Pgx9vb2AOzdu5eGDRtG\nuC5Tpkxxev1naWlJ2rRpSZUqFQDe3t68efMGR0dHHXwVQhiZPrfmDmOkjVI8vLxwW76csWZmtP29\nH1UrF8Q8awgP3z3ktd9r3gW8I4VZClKnSE3W1FkpkrkIxbIUo0reKhTKWEg3/YDNzKBWLa10o337\nhN8vkTPUuA3g5OSEi4sL1apVY968efzyyy+fZ72FcSW65HncuHGf/1y7dm1q165ttFiM7ulTmDMH\nVq2CPHngxx+hf38oVSrCLlTOu1346fl2XtoEw7urkDo/6Z6F8uN3bWhUoiqFrj/F7tA5Oi07TIj5\nM640SYlndXMW3DtAJ7dO5Eufj6bFmtKuVDtK5ygtTdoT4Nq1a8ybN4+NGzfy/v17Jk6cSJEiRahe\nvTr29vZcvXqVjRs3sn79eqpVq4abm9vngTk+ypcvz5QpU5g/fz6BgYF4e3vj7u5ORWPNZCUTBw8e\n5ODBg8YOw+j0PmYn0Zlnl7276Lt9Oo3MnvF3fl+O5zrK5QunaFmiNnYV7MicKjPprdITFBLEx6CP\nPPd9zu3Xt3G57sIQzyFYmFlgY22DQykH6hSsg7mZefyDqVMn2SfPhh63Af744w88PT3x8PAgbdq0\njBgxQkdfjYhKbMdtJaZXCIb26RXg9sgWnyiKoppavEbx+DFMngzOztpg1ru3ljB/RVVVDt8/zOxT\ns9l2dQfBOWtC1hqQqQJYaD+92ri6svvL2ldVhePHYcUK2LoVmjcn+OfBnMvoh+t1V5yvOJPeKj1O\nlZ3oWKYjKS1SGuqrFiJRUxQFVVWT3E+dRh+znz3TSs+ePdPfM37/XZvhHj9ef8/45NarW/x14i+W\nnFpOUJZSzPYI4V7+b/mjfXcgkjE7Eqqqcuv1LXbc3MH6K+t59O4RvSv0pn+l/mRLky3uQV29CnZ2\nWss8IZKRqMZtU1swKKITGAhTp2qlGKlSwbVr2szzV4mzqqrsub2HH1b8QI/tPWhQuAHfv+0KJX6F\nbLU+J84A/l8/Q1GgWjVYsgRu3wZrayzq1qfywClMztuZf376h79s/sLthhsF/yrI9KPT8Q+OcBch\nhDAMQ8w8Z88O//6r10dce3ENx62OVFtejayps1L+XTsoPZ2yT4M5X6Lc5/NiM9oqikKxLMUYXHUw\np3ueZn+n/Tx9/5Ric4sxYOcAnn94HrfgSpYEX19tPY0QwrSSZ0VR1gPHgGKKojxUFKVrTNckG6dO\naUnz4cPan6dPj7RhvvdLb5o4N8FptxP9K/XHu783fSr2IU1oxIbrANHOG2fODKNGwT//aAn1Dz9g\nNtCJeulK4+Howf5O+zn26BjF5xbH+bJzjAshhBBJi0mM2Yk8eX7t95oBOwdQe2VtyuQow12nu/xW\n5zcyhKRFCQ2l9N27XLS2/nx+fN71lcxWkkV2i/Du742luSXfzv+WCYcn4BfkF7sbKIpW93zoUDye\nLkTSY1LJs6qq7VRVza2qqpWqqvlUVV1h7JiMLiQEJk2Cpk21V4c7dsAXA2mYgOAAft3/KzWW16BB\n4QZc7nuZdt+1+1zn5mRvj/W6deGusV67loHNm8ccQ+rU8PPPcP26tnikZElYupRvs5XE9UdXVrdY\nzYxjM7BZa8O9N/d08VULIRIBkxizE2nyrKoqay+tpcS8EqiqyvX+1xlWYxjprLRe0k729tRatIi3\nadLw+tNuoLEes6OQI20O/rD5g5M9TnLh2QXKLCzD3/f/jt3FtWtrm6UIIUyv5jk6ya7m2ccH2rbV\nau3WrIFPbca+dvHZRTq5daJAhgIstltMzrSRb+Hq4eXFHHd3/NFmLwY2b45t3bpxj+vSJejeXdsw\nYMkSsLYmODSYmcdmMv3YdCbUnUDvCr1lUaEQX0iqNc/RMciY7e0N9vba7/py8ybY2sKtWzq53b++\n/9LXoy83Xt5glf0qKuSuEOl5Z3/7jaCVKxnerFnCxuwouHm70X9nf1oWb8n0htOjX8Ny7Zo2iSN1\nzyIZiWrcluTZVN28qQ1UTZtqJRrmEVdKq6rK4rOLGXVgFNMbTKdzmc6GS1iDg2HWLG3h4uTJ0KMH\nKAreL71pt7UdRTMXZYndEjKkzGCYeIQwcZI868mVK+DgoP2uL2/eaH3x375N8K3+vv83Dlsd6PBd\nB36v8ztWFtH02B87VttBUY8LFX38fOjj0YcbL2+wqc0mimUpFvmJqqqVCp46pf1bCJEMyILBxOTo\nUfjhBxg6FP74I9LE2S/Ij27bujHn1ByOdjtKl7JdDDvTa2EBQ4bA33/D3Llam7w3byietTjHux8n\na+qsVFhcgSv/6vEbmhBCGKJsI0MG8PMD//gvjlZVlVknZtF6c2uWNVvG1AZTo0+cAS5c0DqJ6FGm\nVJnY0GoDfSr2ofry6rhcd4n8REXRSjek7lkISZ5Nzv792ivI1au12dxIPHn/hBorauAX5MeJHiei\nnikwhBIl4ORJyJEDypWDc+dIaZGS+bbzGVtrLHVX1WXP7T3Gi08IkbQZInlWFK3u+cWLeF0eEBxA\nR9eOrLy4khPdT9CoSCx3ibtwQdvhT88URaFPxT7sbr8bp11OTD0yNfIF4FL3LAQgybNp2bkT2rXT\n+ivb2ER6yvUX16m2rBqtSrRifav1pLU0gd2GUqbUWuZNn67FvWEDAB3LdMTlRxc6u3VmwekFRg5S\nCJEkGSJ5hngnz2/939J4XWP8gv041u0YhTIVit2FPj7ar8KF4/zM+KqQuwInepxgw9UN9Nzek8CQ\nwPAn1K6tbZYiRDInybOpOHgQunSBbdugZs1ITzn28Bi1V9Xmt9q/MfKHkaa3IK91a23mfORIGD4c\nQkKokb8GR7sdZdbJWYz2Gi3t7IQQumWo5Dlbtjh33Hjy/gk1V9akZLaSbGq9iVQpUsX+4osXtfak\nZob9Np03fV7+7vo3//r+S/MNzcO3syteHD5+hHv3DBqTEKZGkmdTcO6c1lVj40aoUiXSUzzveNJ8\nQ3NW2a+ic9nOBg4wDkqX1haUnD6tlZ98/Ih1ZmsOdz3M9pvbGeI5RBJoIYTuGHLmOQ7J870396ix\nvAYO3zowp/GcuG+PbaCSjciktUyLy48uZEmVhSbOTXgf8F77QOqehQAkeTa+O3e0FkiLFkGdOpGe\n4nnHkw4uHXD90TX2tXLGlDUr7N4NWbJAvXrw8iXZ02TnQOcDHHt4jD47+hCqhho7SiFEUmCCyfO9\nN/eos6oOQ6oOYcQPI+L3lvDiRb0vFoyOhZkFq+xXUSRTERqubYiPn4/2gdQ9CyHJs1G9fQt2djBm\nDLRoEekpYYmzy48u1Mhfw8ABJkCKFLBiBdStC9Wrw717ZEqVib0d93L95XX6efSTGWghRMKZWPIc\nljj/XPVn+lfuH//nGaDTRkzMzcxZbLeYSrkr0XhdY20GWpJnISR5NpqQEHB01Gab+/aN9JRD9w4l\nzsQ5jKLAxIng5KQl0Jcvk84qHTscd3Du6TmG7h0qCbQQImGCgkwmeX787jF1V9VNeOIcGAg3bkCp\nUvG/h44oisKsRrP4Lvt3Wg20dQGpexbJniTPxjJypNY39K+/Iv344rOLtNnchg2tNyTOxPlL/ftr\n/aobNoQLF0hvlZ5d7Xex+85uJv490djRCSESMxOZeX7j/4ZG6xrRu0LvhCXOoO2WWLAgpIrDAkM9\nUhSFhU0XkiNtDtpsaUtorZpS9yySNUmejWH7dm1x4ObNWnnDV/7x+Ycmzk2Y22QudQvpbitWo/rx\nR5g3T2tld+YMWVJnwbODJ6surmLhmYXGjk4IkVgFB0c6jupcNMmzX5AfzdY3o36h+gytPjThzzKB\nko2vmZuZs9p+NWaKGasyP0CV0g2RjEnybGgPH2qbnzg7awvqvvLC9wU2a20YUWMEbb9ta4QA9ahl\nS1i6VFsgeeIEudLlYlf7XYw7OI5dt3YZOzohRGJk5JnnkNAQHF0cyZs+LzNtZuqmhagRO21EJ4V5\nCja03sCuPH682e1m7HCEMBpJng0pKEjbBGXwYKhWLcLH/sH+2K23o03JNgyoPMAIARqAnR2sXAnN\nmsHx4xTJXASXH13o5NaJi88uGjs6IURiY8jk+flz+Gqdxv92/48PgR9Yab8SM0VH31KN3GkjOqlT\npGbO/zwJ9n3Hlp0zjB2OEEYhybMhTZwIadLAL79E+EhVVXps60GBjAWYUHeCEYIzoMaNte3H7e3h\nwgWq5avGvCbzsFtvx+N3j40dnRAiMTFU8pwqlfbLx+fzoUVnFrHvn31sabMFS3NL3TxHVU2ybONL\nOdLlxLKeDYdW/c6Bf2THQZH8SPJsKOfOwfz5Wvu2SHaMmnZ0GtdfXmdF8xWmt3OgPjRqpP17NGkC\nN27Q9tu29KvUD7v1dnwM+mjs6IQQiYWhkmeAXLng6VMADt47yJiDY9jmsI0MKTPo7hmPHmk13Dly\n6O6eepDBphkjQ6risNWBW69uGTscIQxKkmdDCAiAzp21jhO5c0f4ePuN7cw+NRt3B3dSp0hthACN\npFUrmDwZGjSAe/cYVn0YJbKVoPeO3tLCTggRO4ZOnp884a7PXRy2OODc0pmiWYrq9hkmXLIRTu3a\n5Dpzg3G1xtFiYws+BH4wdkRCGIwkz4bw229QpAi0bx/ho+svrtN9W3e2tt1K3vR5jRCckXXuDEOH\nQv36KM+escRuCZefX2bOqTnGjkwIkRgYOHn2f/gPzdY3Y1TNUdQrXE/3zzDxko3PvvkG/P3pk7UR\nlfNUpvu27jLpIZINSZ717dIlrcPEwoXapiFf8A30pdWmVkyuN5kqeasYKUATMGAAdOkCtrak9g/B\n5UcXJv49kcP3Dxs7MiGEqTNg8qzmyoXrgQVUzlOZ/pUS2Ms5KibaaSMCRYHatVEOHWK+7Xzu+txl\nxjFZQCiSB0me9Sk0VNs9cMKECPVrqqrSx6MP3+f9nu7luxspQBPy669QuTK0bk3htPlYbb8ahy0O\nsoBQCBE9AybPJ0LuE/L4IXObzNXf2pTEUrYB2g65Bw+S0iIlLm1d+OPEH+y7u8/YUQmhd5I869PK\nldo23D16RPho6bmlXHh2gXlN5hk+LlOkKDB3LlhaQq9e2Fg3pH+l/rTb2o7g0GBjRyeEMFUGSp7P\nPT3Hiud7aJa+sv7Wpnz4AE+eQFEd11HrS+3a8GmzlHwZ8uHc0plOrp149uGZUcMSQt8kedaXV69g\nxAhYsCBCd43zT88z0mskW9psSV4LBGNiYQEbNsDVqzBuHMNrDMfS3JIJh5N46z4hRPwFB4O5uV4f\n8db/LW03t8Whwf9I/1qPC+MuX4aSJQ1Xw51QxYppC+Lv3QOgTqE69Czfkw4uHQhVQ40bmxB6JMmz\nvgwfDg4OUK5cuMNv/d/SZnMb5jaeyzdZvzFScCYsTRrYsQPWrcN82XLWtlzL4rOLOXjvoLEjE0KY\nIj1vz62qKt22daNRkUbUrdb+c6s6vUgs9c5hPtU988VW3aNrjSYwJJCpR6YaLSwh9C2R/HibyJw7\npyWA3t4RPuq3sx8NrRuS9t9s2Dg5EaAoWKkqTvb22Nata4RgTVD27LBrF/zwAzkLF2ZF8xV0cOnA\n+d7nyZYmm7GjE0KYkuBgSK2/N3iLzi7i3pt7OLd0Zs8uT2rev09jJyesQPfj9sWLiSt5Bi15PnBA\nW/QNWJhZ4NzKmYqLK1KzQE2q569u1PCE0AeZedY1VYWff4axYyFD+Mb56y6t4/zT89S3tOOn9evx\nbNmSQy1a4NmyJT+tX4+Hl5eRgjZBRYvC+vXg6IiNWpj237Wni3sXaYUkhAhPj2Ub3i+9GX1gNM4t\nndl3+Cj93d0JNTfnnI2NfsbtxLRYMEzYzPMXY3Pe9HlZYrcERxdHXvu9NlpoQuiLJM+6tnOn9lrv\nq0WC997cY9CeQTi3cmbR9l3c+arn85327Znj7m7ISE1fnTrw++9gZ8eE8j/z6uMrZp2cZeyohBCm\nJCRELzXCgSGBtHdpz4Q6E/gm6zfMdnPjTocOPM2cmVyvXgE6HrdDQuDKFShdWjf3M5RixSAw8HPd\ncxi7b+xoUbwFPbf3lEkPkeRI8qxLwcHahh/Tp4cbzENCQ+jk2olfqv1C2ZxlCYiixZG/oeJMTHr3\nhoYNSdG+I+uarWLi3xO59uKasaMSQpgKPXXbGHNgDHnT56VXhV4An8ftp1mykOv1f7OpOhu379yB\nrFkjvLE0eZHUPYeZUn8KN1/dZO2ltQYPSwh9kuRZl5Yv1+p1bW3DHZ56dCoWZhYMqTYEAKsofgpP\nqfcAE6k//oDQUKwnLWBi3Yl0dO1IUEiQsaMSQpgCPZRtHLx3kNUXV7PUbunnfs5h4/aXM8+gw3E7\nMdY7h4kieU5pkZI1LdYw2HMwD94+MHhYQuiLJM+64usL48bBjBnhdhI88+QMs07OYpX9KswU7Z/b\nyd4e63Xrwl1uvXYtA5s3N2TEiYeFBWzcCLt20fMs5Eybk/GHxxs7KiGEKdBx2cYb/zd0cu3E8ubL\nwy1QDhu3n2TNSu5PybNOx+3EWO8c5tNmKUQyMVQ2Z1kGVRlEV/eu0r5OJBnSbUNX5s+H6tWhQoXP\nhwKCA+js1pm/bP4iX4Z8n4+Hrc6e4+qKP9rMxUBHR+m2EZ1MmWD7dpQaNVjlvJRvz/bEtqgt3+f9\n3tiRCSGMScdlG4P2DMKumB2NijQKdzxsfH4ydixV7tzBJkUK3Y7bFy9Ct266uZehFS0KQUFa3XOh\nQhE+Hlp9KDtu7mDuqbk4fe9k+PiE0DElMRXyK4qimmS8Hz6AtTXs3w+lSn0+PHL/SLxferO17Vb9\nbeWa3Hh4QO/ebFs3ll8uz+B87/Oy0YxIFBRFQVXVZDUQGGTM7toVfvhBJ4mnx00PBu4ayKW+l0hr\nmTbykzZt0n5t2ZLg54WTLx8cOgSFC+v2vobi6AgNGmj/e0Ti9uvbVF1WlcNdDlMiWwkDBydE/EQ1\nbkvZhi7Mm6fVfH2ROJ9+fJpl55cx33a+JM66ZGsLPXrQbPQaqmSvwIh9I4wdkRDCmHQ08+zj50Pv\nHb1Z1mxZ1IkzQP788EDH9buvX8Pbt1CwoG7va0i1a2sTSFEokrkI4+uMp7NbZ4JDgw0XlxB6IMlz\nQr1/DzNnan2dPwkIDqCLexf+svmLnGlzGjG4JGrMGEiXjkV/Z2Dztc0cfXDU2BEJIYxFRzXPgz0H\n0/yb5tQpVCf6E/WRPIctFjRLxN+SGzaEvXshNOq65t4VepPOKh1/nfjLgIEJoXuJ+L9UEzF3LV01\nxQAAIABJREFULtSrByVLfj7026HfKJalGA6lHIwYWBJmZgZr15JypyeuoW3psb0H/sHS6E+IZEkH\nM88eNz04dO8QUxvEYkvpnDnBxwf8dTjmJOZOG2EKFoSMGbWvJQqKorDEbglTjkzh1qtbhotNCB2T\n5DkhPnyAP//UZkI/CSvXWGC7QMo19ClTJnBx4ftp62jkl4fxh6T7hhDJUgJb1YWVayxttjT6co0w\nZmaQOzc8ehTvZ0Zw4ULiT54BbGxgz55oTymcqTC//vArPbb3kO4bItGS5Dkhli6FWrWghLb4ISA4\ngK7uXfnT5k8p1zCEMmXgzz+ZvuAuG48u4vzT88aOSAhhaAks2xjiOYRm3zSjbqE4dM3Inx8ePoz3\nMyNICjPPoCXPu3fHeJrT904EhgSy+OxiAwQlhO5J8hxfQUHa5h1Dh34+NO3oNAplKkS7Uu2MGFgy\n06EDFrZN8fLKRzf3rrJ5ihDJTQLKNrz+8WLf3X1MrR+Lco0v6bLuOSgIbtwIt+A80apdG86e1dYC\nRcPczJxlzZYx+sBoHr7V4Q8hQhiIJM/xtWEDFCkClSoBcOPlDWadnMX8JtJdw+BmzCDfxxT0+duP\nGcdmGDsaIYQhxbNswy/Ij947ejOvyTzSWaWL28W6TJ69vaFAAUidBFpupkkDlSvDgQMxnloyW0mc\nKjvRe0dvTLIFrRDRkOQ5PlQVpk37POscqobSa0cvRtccHW4zFGEglpYomzbRw/MVBzdMwfult7Ej\nEkIYSjzLNiYcnkDZnGWx+8Yu7s/UZfJ89iyUL6+be5mCRo1irHsOM6zGMB6/f8y6y+tiPlkIEyLJ\nc3zs3q0tGrGxAWDF+RV8DPrIgMoDjBxYMlawIOZLl7HZxYIh62UbWCGSjXiUbVx+fpnF5xYzu9Hs\n+D0zXz7dJs9f7Eyb6MVi0WAYS3NLljVbxhDPIbz8+FLPgQmhO5I8x0fYrLOi8PzDc0bsH8ESuyWY\nm8V/xbfQgebNSevQkWFLr7Py/ApjRyOEMIQ4lm2EvSmcUGcCudLlit8zdblgMKklz999Bx8/wq3Y\ntaKrmLsi7Uq145e9v+g5MCF0R5LnuDp7Fu7cgbZtARi0ZxBdy3albM6yRg5MAJhNnUYFi3zcH/s/\nmckQIjmI48zzwjMLMVfM6VmhZ/yfmT8/3L+vlfAlRHAwXLoE5col7D6mRFGgaVPYvj3Wl4yvM559\nd/dx6N4hPQYmhO5I8hxXc+ZAv36QIgW7bu3i5OOTjK09NubrhGFYWpLGZQc/Hwll4ZzOxo5GCKFv\ncah5fvzuMWMPjmWx3WLMlAR8+0ufHlKlgn//jf89AK5fhzx5tPslJc2agbt7rE9PZ5WOWY1m0dej\nL4EhgXoMTAjdkOQ5Ll68ADc36NED30Bf+u3sxwLbBaROkQRWSSclBQpgvnQ5Xabu4ej5bcaORgih\nT3GYeR64ayD9KvajZLaSMZ8ckyJFYl2aEKWkVrIRpl49beOXl7F/+9eieAusM1sz/eh0PQYmhG5I\n8hwXS5dCy5aQNSvjDo6jer7qNLRuaOyoRCRSt/oRv+a2BHV0JCDQz9jhCCH0JZY1z+7e7lx9cZUR\nP4zQzXOLFoXbtxN2j6SaPKdKpSXQHh6xvkRRFOY0nsOfJ/7kzus7egxOiIST5Dm2goNhwQIYOJCr\n/15l5cWVzGw409hRiWgUWbSZXAEpODy4lbFDEULoSyzKNj4GfeSn3T+xwHYBKS1S6ua5RYvKzHN0\nmjeHbXF781cwY0GGVh9Kv539pPezMGmSPMeWuzvkz49atiz9d/ZnXK1x5Eibw9hRiWgolpak3bKd\nsit38/BA7OvvhBCJSCzKNib9PYmq+arGbQvumCS0bCNssWBS6vH8JVtb2LcP/P3jdNmgKoN4+v4p\nm65u0lNgQiScJM+xNWcODByI82Vn3gW8o0/FPsaOSMRCnjI1OD60HYqjI2oMW8YKIRKhGMo2br66\nycIzC3X/pjChZRve3klzsWCYrFmhTBnYvz9Ol6UwT8HCpgsZ7DmYN/5v9BScEAkjyXNsXLkCN2/y\ntkk9ftn7C/Nt50tP50Sk8a8rOVXIin86xmMnMSGEaYumbENVVQbsHMDIH0aSO11u3T43bOY5vuUF\nJ09qW1knZc2bx6nrRphq+aphW9SWX/f/qoeghEg4SZ5jY+lS6NaNsUcnYFvUlip5qxg7IhEHKcxT\nkGfFFkKPHeXjqmXGDkcIoUvRlG1svb6Vpx+eMrDyQN0/N1MmsLKC58/jd/3x41AliX8vadUKXF0h\nKCjOl06pP4Wt17dy9slZPQQmRMJI8hwTf39Yt47rzaqx/sp6JtefbOyIRDx8/01d1o2wJfSngXD3\nrrHDEULoShTJ84fADwzaM4h5TeaRwjyFfp6dkNKN48ehalXdxmNqChbUZuj37YvzpZlTZWZyvcn0\n39mfUDVU97EJkQCSPMfExQW1XFl6XpnE+DrjyZo6q7EjEvHUr9cSptQ042Nr+3jNhAghTFAUNc/j\nD42nTsE61CxQU3/Pjm/HjTdvtB0KS5fWfUympl072LAhXpd2LtsZRVFYcX6FjoMSImEkeY7J0qUc\nql+UwJBAupfrbuxoRAJkS5ON3KOmcjHkMero0cYORwihC5HUPF97cY3lF5YzrcE0/T67aFG4cSPu\n1506pbWoi8O24olW27Zayzq/uPfbN1PMmNdkHiO9RvLa77UeghMifiR5js7t24ReuUyn0K2ySDCJ\n6F2xD6M65MZvxeI4rwIXQpigr8o2whYJjqk5hpxpc+r32aVKaQvK4yo5lGyEyZlTa8e3c2e8Li+f\nqzxtSraRxYPCpCSDH3tjx8PLi9lubgQoClaqipO9Pbaenhyonoem31WjYu6Kxg5R6IC5mTkTHBbT\n7Y4dzp07YXb+AmTLZuywhBDx4OHlRQN/f5oOG4Zibo6TvT3vsj3Hx9+HvpX66j+A776Dy5fjft3x\n49AnGbU7bdcOnJ21BYTxML7OeErMK0GP8j2okDuJbiojEhUlMe3ioyiKqo94Pby8+Gn9eu60b//5\n2Ddr1nDWdQuNuqfA/febZE6VWefPFcbT3b077Z0vU9c3O2zfDopi7JBEEqcoCqqqJqv/o+lrzIb/\nxu3rK1aQevdugi0sKOS8greFPNjRYTtV8xlgZjc0VOvT/PgxZMgQu2uCgrQeyHfuaL8nB2/fQoEC\nWolLjvhtLrbi/AoWnV3Ese7HMFPkpbkwjKjGbfl/IDDbzS1c4gxQrFAhLqfxo5vjdEmck6Ap9afQ\nodw/fHzyAGbPNnY4Qog4mu3mxh1HR1KEhBBipn0r+6fyR1K9z2GYxBnAzAxKloxb6cbZs1oXiuSS\nOIP2g0XLlrBqVbxvIYsHhSmR5BkIiGTWsdP21az/LhWdy3Y2QkRC37Klycaoer/RwyEV6sSJcOGC\nsUMSQsRB2LhdbvFiVDMz+HAX/t1H/o/VDBtI6dJxK904cADq1NFfPKaqZ09tz4R4vomQxYPClJhU\n8qwoSiNFUbwVRbmlKMowQz3X6qv/mDO+fkyDi7fwLthAXg8lYb0r9MY7QxDHB7fRavJ8fY0dkhCJ\nirHGbPg0bisKF4oW1RKyW39Bwa6kV1MbMgxtC+pz52J/fnJNnqtUAUtLOHQo3rcIWzw4ymuUDgMT\nIu5MJjNUFMUcmAs0AkoC7RRFKWGIZzvZ22O9bt3nv7d1mcKBAulwat3PEI8XRmJuZs68JvNoY+lG\nYPmyMGiQsUMSItEw5pgNX43bzz1BDaSw1xsGNm9uqBA033+vbbUdG4GB2mLBmnrsPW2qFAV69YJF\nixJ0m/F1xuNy3UV2HhRGZTLJM1AZuK2q6j1VVYOADYBBRkHbunWZ1a4dNq6ulNu2gM6Hr5GlvRO2\ndesa4vHCiKrmq0oj60aMa50VvLxgyxZjhyREYmG0MRv+G7frum3A8vpsqjwqy2zHDoYft8uW1XYZ\n/PAh5nNPnYJixbStvZOjTp1gzx54+DDet8iUKpPsPCiMzmS6bSiK0hqwUVW156e/dwC+V1V14Bfn\n6G3lNkBIaAgtJ5dh48wHpHz+ClLoaUtXYVJe+L7g2/nfcrz0bKw7OsGZM5A/f4zXRdreUH7gSnQe\nv3tM1tRZsbKw0utzklq3DVMYswEG7hxIUGgQC5su1OtzolWtGkyaBLVrR3/eyJHaDOzEiQYJyyQN\nHqwttJwxI963CFVDqb68Oj3K9aB7+dhvXiZjdtLwIfADvoG+5Egbv84tcRHVuB2nPs+KorRVVXXT\npz9nB75VVfWAjmKM1Qg7bty4z3+uXbs2tWMarOLg0vNLtDkXgFX7zpI4JyPZ0mRjXO1xdL+6kAOD\nB6O0b6/VJUaz+1dk7Q3vfHqFLINx4hGqhtJmcxv6VuxLxzIddXrvgwcPcvDgQZ3eM66S+pj9Megj\nJx6fYHf73Tq7Z7x8/z2cOBFz8rx9OyxebJCQTNb//gflysHo0bFv7/eVsMWDjdc1pkWJFrHqiCVj\ndtLx+6Hfeev/lkV2CSsBikxsx+0YZ54VRbED6gK7gIqqqk764rMaQO6wwTkhFEWpAoxTVbXRp7+P\nAEJVVZ36xTn6ncVQVdSiRVHWr4dKlfT3HGFyQkJDqLSkEj9XGYzjkJXwww8wdmyU59s4OeHZsmXE\n466u7J41S4+RCl1aeWElC84s4Hj343pfHGyomedkNWaj7SioGLtPu6srLFgAnp5Rn3PvnvZ95dkz\nME/mu9V26gRFisCYMQm6zYCdAwhVQ5lvOz/Gc22cnNjfvDm1Llyg/rlzFHn8mPS+vph/+ED9/v3B\n3h7y5k1QPEL/rr+4Ts2VNbnS94pRZ55j893iGPAEGAqMVhRlv6IoIxRFqfTps1Q6ivEMUFRRlIKK\nolgCPwLbdHTv2Dl1CiVFCqgouwkmN2GLB3/ZP4z3S+Zp3wiPHIny/MjaGwL46ytAoXM+fj4M3zec\neU3mJbWuOslnzAbjJ84AdetqCwE/foz6HBcXsLOTxBm0iYnZs+HVqwTdJtaLB/38aHHuHP+0a8fk\npUsJtLBgc61a/NW6NWfy5oXTp7WuKf36wYsXCYpJ6I+qqgzYNYAxNccYJHGOTozfMVRVfaWq6nRV\nVesDfwDTgRzAKuAd0EYXgaiqGgwMAPYA14CNqqpe18W9Y61yZW3RmCkMxsLgwhYPjr25SOtH2qED\n+PhEeu7X7Q3DpNRngEKnRh8YjX1xeyrmTlo/LCerMdtUZMiglSIcPhz1OevWgaOj4WIyZdbW0KYN\nTJmSoNuELR7st7Nf1IsHN2+G4sUp9ewZdpMm8f2CBYzr2pXNdeqw+/vvOViypLZ5y82bWrlmhQpa\nCY4wOZuubuLlx5f0rdTX2KHEbcGgoih2qqpu/+LvWQAfVTXMkldDvAIUiZcuFoOELR7c32k/301c\nor1i3bgxwg9UkdXPWa9dyyxHR6mfSwTOPz1Po3WNuNbvGllSZzHIM42xYFDGbAOaNAmePIG5cyN+\n5u2tzU4/fCgzz2GePCGwRAn6NmvGncyZ4z1mh6qh1Fheg65lu9KzQs//Pnj/HgYM0NoILl6MR3Bw\n7MbsbdugRw9YuxYaNkzoVyl05H3Ae0rOL8n6Vuupkb+GwZ6rkwWDXw7Cn/6esHcuQuiIrhaDZEuT\njd/r/E6/nf04PNUTpUoVWL4cuodf0R12zzmurvijzTgPlMQ5UQhVQ+m/sz8T6040WOJsLDJmG1C7\ndtrby5kzweqrzi3z50PnzpI4f8HD25vzJUviePUq9WfOBEWJ15htppgx33Y+NmttaFGiBVlTZ9W2\nQHdw0BZwnj0LadJg++n8GMfsZs20EpsWLWDr1uTZk9sEjT88nnqF6hk0cY6OybSqi41kNYsh4kSX\nC/hCQkOosqwKAyoNoLNlJahVC/7+G4oX11W4wohWnF/BwrMLDbJI8EtJrVVdbCS7MbtuXa1utnXr\n/469fq0tjrtyBXLnNl5sJiZsAd/Jvn1Z2KwZS5s21Y7Hc9H1T7t+wi/Al8V3SsDUqdobgLZt4x+g\np6f2A8/p07KQ0MiuvbhGrZW1DLZI8EsJWTAohMnT5QI+czNzFtguYPj+4fgUygUTJmizSgEBCQtS\nGJ2Pnw8j9o9IiosEhSno2xcmT4aQkP+OTZgArVpJ4vyVAEUhxNycDr/+yqSlS/nuzh0g/ouux5cc\nQLvha3m/fqW2GU1CEmfQSjZ++kn7QSgoKGH3EvGmqioDdw00iUWCX5LvHiJJ0PUCvoq5K2L/jT2j\nvEZpW8oWLgwjRsQ/QGESRh8YTYviLZLcIkFhIlq3hjRpYN487e+HDsH69QleGJcUhY3Z3gUKMKh/\nf7aOHUv216/jN2Zv3076qrXIWrMRdbqZE5xfRzPFw4Zpi0ETsKGLSJhNVzfx6uMrk1gk+CVJnkWS\n4GRvj/Wnerkw1mvXMrB5/HcLnlhvIluvb+Xs03OwZIm2dfeuXQkNVRjJ+afn2XxtMxPrfbW7W3Cw\ncQISSY+iaJ16pk7VZi5btYLVqyFL0q6tj48vx+x1DRqwpkEDDvfowZBatWJ/k/fvtcmNn36CjRsp\ntciVdGkyseD0At0EqSjapjYzZ8K1a7q5p4i19wHvGeI5hHlN5mFhFqclenonNc8iyfDw8mKOu/t/\ni0GaN0/wAr5wm2gc/ltbhHL+POTMqZOYhWGErcjvVq4bPcr3CP9ht25arWqHDnqNQWqekxEfH23W\nuVIlyJPH2NGYrHBjtqoy+80bih0+DJs2aYsvoxIaqv1Q8uuv0KgR/PknpE8P/Fcfe7nvZXKm1dE4\nPWcOuLnBvn3SytaAhu4dyr++/7LSfqXRYohq3JbkWYhohKqh1FxRk05lOtGrQi9tS9lTp7QZaDN5\ncZNYRLVIcM+2bVRv04aOnTrxMVWqeLXKii1JnoWIBRcX6NMHmjTRZpTLlv0vYb1zB3bs0LqXZMmi\nJc3ffx/hFsP2DuPJhyesabFGNzEFB0Pp0jBtGnxa2Cj0K6pFgrpoSRsXkjwLEU+Xnl+iwZoGXO13\nlayWGbXWRa1awZAhxg5NxIKPnw8l5pXAw9GDCrkrfD7u4eXFydGj+S5FCtqOGweA9bp1zGrXTi+D\nsSTPQsTS27fw11+wZg08fgw5cmiz+alTg42N1oe5evUoZ4E/BH6g5LySrGmxhloF41AGEp1du2DQ\nIK1rioVplRAkNaqqUm91PVqWaMmAygM+H490fwU9jtkg3TaEiLfSOUrjWMqR4fuGa4Oms7NW03g2\nhi1hhUkYsX8ELUu0DJc4A8x2daX1s2cs/mIm6U779sxxdzd0iEKIL2XIoG3hffu2tl22lxfcu6dt\nQrNyJdSoEW35RFrLtPxp8yf9d/YnKERHnTIaNdLK9ZyddXM/ESXny874+PvQp2KfcMdnu7lxp317\nyty+TeuDBwHjjdmSPAsRC7/V+Y1dt3dx/OFxKFhQq4FzdIQPH4wdmojG8YfH2XZjG5PqTYrwWbGn\nT7EKCmJ/+fLhjse3VZYQQg/SptW6HWXKFKd645YlWpI3fV5mnYx7z+hIKYpWtjdxYvhWhEKnfPx8\n+HnvzyxquijCIsGwlrRlb9+m6fHjn48bY8yW5FmIWEhvlZ4ZDWbQb2c/gkOD4ccftdeGTk7GDk1E\nISgkiD4efZjZcCYZU2aM8HnLS5eY36wZ6le16/FtbyiEMB2KojCn8RymHJnCo3ePdHPTunW1WuvN\nm3VzPxHBiP0jaFm8JZXzRFwwGtbeMEVwMIEpUnw+bowxW5JnIWLJoZQDmVJ+0QZp9mw4ehQ2bjRu\nYCJSs0/OJkeaHDiUcoj44bNn1Hj6lMPv3oU7nND2hkII01E0S1H6VerH4D2DdXPDsNnnCRO0jh9C\np8LeFEZoJ/pJWHtDy6AgAj/VnRtrzJYFg0LEwfUX16m5suZ/bZDOndNq4U6d0so5hEl48PYB5ReV\n50SPExTJXCTiCePHw8OHeDg46Ly9YVRkwaAQhucX5Me3879lYdOFNLRumPAbqiqUK6dtfNOoUcLv\nJwDtTWGFxRUY+cPIyCc8PvHw8uLRuHFkfv+eZTVr6nXMBum2IYTODN83nAdvH+Dc6tPCkZkzYetW\nOHxYVmGbCPsN9lTIVYHRtUZH/DA4WPtBx8MDypQxWEySPAthHDtu7mDQnkFc6nOJVClSJfyGy5Zp\nLfU8PBJ+LwHAjGMz8LzjyZ4Oe1Biqm2fOhVev9Z+1zPptiGEjoypNYaTj0+y69an3QYHDYJ06eBT\nuzNhXO7e7lx/eZ2h1YdGcYK7ljwbMHEWQhhP02JNKZuzLBMOT9DNDR0dtbeNt2/r5n7J3IO3D5hy\nZArzbefHnDgDBAbCFzXPxiDJsxBxlDpFahbYLqDfzn74Bvpqm6WsXq21UNqzx9jhJWsfAj/gtNuJ\nhbYLsbKwivykOXOgf3/DBiaEMKrZjWaz+NxiLj+/nPCbpUql7Uw6b17C7yUYuGsgP33/U+QldpEJ\nDARLS/0GFQNJnoWIh4bWDamRvwZjD47VDuTIAevWQZcu8EhHK7tFnP128DdqFahFnUJ1Ij/hzBm4\nexdatzZsYEIIo8qVLhcT6kyg5/aehITqoNVcv37apImvb8LvlYy5e7tz4+WNqN8URiYoSJJnIRKr\nPxr+wZpLazj39Jx2oFYtrXWdg4P2H7cwqIvPLrLq4ipmNJwR9UkzZ8L//mf0V35CCMPrWaEnKcxT\nsPDMwoTfrEABqFYNtmxJ+L2SqfcB7xm4ayALbBdE/aYwMjLzLETilS1NNqbVn0bP7T213s8Aw4ZB\n+vTw66/GDS6ZCQ4Npvu27kyuN5nsabJHftK9e+DpqW3tK4RIdswUMxY3Xcy4Q+N00/u5WzdYvjzh\n90mmRu4fSd1CdaN+UxgVSZ6FSNw6lelExpQZmXXi0y5WZmawZo3W+3nbNuMGl4z8efxPMqbMSLdy\n3aI+adYs6N5d++FGCJEslchWgv6V+jNg5wAS3AnG1ha8veHWLd0El4wceXCErde38ofNH3G/WJJn\nIRI3RVFY1HQRk49M5h+ff7SDWbLAhg3Qs6c22yn06uarm0w9OpXFdoujXqnt4wOrVsmOkEIIRtQY\ngfdLb1y9XRN2I0tL6NBBWywuYs0/2J8e23owp/EcMqfKHPcbSLcNIRK/IpmLMKTqEPp69P1vJqNq\nVRg+HNq2hYAA4waYhIWqofTc3pNRNUdROFPhqE9cvBiaNoW8eQ0XnBDCJFlZWLHYbjEDdw3krf/b\nhN2sa1ftB/MQHSxCTCbGHxrPt9m/pVXJVvG7gcw8C5E0/FztZ55+eMqaS2v+O/i//0GePPDLL8YL\nLIlbfHYxgSGBDKw8MOqTPn6Ev/6Cn382XGBCCJNWs0BNmhZtys+eCRwXSpWCXLlg/37dBJbEXXh2\ngSXnljC38dz430S6bQiRNKQwT8HK5iv52fNnnrx/oh1UFFixQtuFasMG4waYBD18+5DRB0azrNky\nzM3Moz5xyRLtTUDp0oYLTghh8qY3nI7nXU/23E5gf35HR1i/XjdBJWFBIUF0c+/GtAbTyJUuV/xv\nJDPPQiQd5XKVo2/FvvTa3uu/8o2MGbWtuwcOhEuXjBtgEqKqKn08+uBU2YmS2UpGfaK/P0ybBqMj\n2aZbCJGspbdKz1K7pfTc3jNh5Rs//qjtXOrvr7vgkqCZx2eSNXVWOpfpnLAbSfIsRNLya81fefTu\nEasvrv7vYNmyWqeHFi3g9WvjBZeErL20lodvHzKsxrDoT1y6FCpWhHLlDBOYECJRaWDdgMZFGjPE\nc0j8b5I7tzbO79qlu8CSGO+X3sw4NiP6hd2xJcmzEEmLpbklK+1X8sveX3j87vF/Hzg6QvPm2u+y\nsCRBHr17xBDPIay0X4mleTQDaEAATJ0KY8YYLjghRKIzveF09t3dx+7bu+N/k3btwNlZd0GZElWF\nAwe0MsSHD+N8eVBIEB1dO/J7nd8pmLFgwuORbhtCJD1lc5alX6V+9NrRK3wf0WnTtIROkrl4C1VD\n6ereFafvnSifq3z0Jy9fDmXKQIUKhglOCJEopbdKz9JmS+m1vVf8yzdatdI2YXr3TrfBGZuvLzRr\nBn37wr592lu8rVvjdIvJRyaTJVUW+lbsq5uYZOZZiKRp5A8jefzuMSsvrPzvoIWFtnnK2rXg4mK0\n2BKzBacX8C7gHcNrDI/+RD8/mDRJflARQsRK/cL1aVK0CYP2DIrfDTJnhlq1tNrnpCIkBNq00fYu\nuHQJ1q2DvXuhT59Yr+E5++Qsc0/NZVmzZQkv1wgj3TaESJoszS1ZZb+KofuG/rd5CkD27NpP7b17\nw7VrxgswEbr16hZjD45ltf1qLMwsoj959mz4/nuoXNkwwQkhEr3pDaZz6P4h3Lzd4neDdu2SVmel\n2bPhwwdt7UhYslqunFYO17OnVs4RDb8gPzq6duSvRn+RJ30e3cUlM89CJF1lcpZhRI0RdHDtQHBo\n8H8fVKwI06drNdCygDBWgkOD6eTWibG1xvJN1m+iP/n1a5gxAyZONExwQogkIZ1VOta2WEufHX3+\nazkaF02bwpEj8DaBG6+YgkePtDF0xQrtremXunTROots3x7tLUZ5jaJU9lK0K9VOt7FJ8ixE0va/\nKv8jdYrUTPp7UvgPunTR6shat9ZeQYloTTkyhTQp0tC/cv+YT540Sft3/SaGJFsIIb5SNV9V+lbs\nSxe3LoSqoXG7OF06rXRjxw79BGdI48Zps8vW1hE/MzPTSuKmTYvy8gP/HGDD1Q3Mt52vu3KNMLJg\nUIikzUwxY5X9Kuafns/xh8fDfzhtGqRJA/37x/j6Kzk7+uAoc0/NZaX9SsyUGIas+/e1mRKpdRZC\nxNOvNX/lQ+AHZp2YFfeLW7aM84I6k3PvHri5wbBoWoE2awZ37oC3d4SPXvi+oKNrR1Y0X0HW1Fl1\nH19AAFhZ6f6+cSDJsxB6ljtdbhbYLqCDawfeBXyxEtvcXGttdPKktn20iOC132scXRwiszlQAAAa\nr0lEQVRZYreEvOnzxnzBmDHaDyO5ErB7lRAiWbMws2Bty7VMOjKJi88uxu3iZs20rbp9ffUTnCHM\nng1du2qbfEUlRQro1EnravSFUDWULu5d6FC6Aw2tG+onPkmehUgeWpRoQb1C9ei/s3/49nXp0sG2\nbVoNdFJ41adDqqrSY1sPWhRvgd03djFfcPKk1krp55/1H5wQIkkrnKkwMxvOxNHFkY9BH2N/YebM\n2mLl3QnoGW1M797BypXarrgxcXSELVvCvTmddWIWrz6+Ynyd8fqLUZJnIZKPP23+5PzT8yw7vyz8\nBwUKaK3runWTLby/sPDMQu69ucfU+lNjPjk0FAYMgClTIH16/QcnhEjyOpbuSPlc5enn0S/8pEdM\nEnPpxsqVUL8+5M8f87mlS2tj79WrgNaWbvKRyaxvtZ4U5nqsSZbkWYjkI41lGra03cKI/SO48OxC\n+A+rVNFeldnZwePHkd8gGbn8/DJjDo5hQ+sNWFnEYpBcvlwbTDt00H9wQohkQVEUFtou5MyTMyw/\nvzzmC8LY22tbdQcE6C84fVm+XOvjHBuKopWpuLvzPuA9DlsdmNtkLoUyFdJffCEh2q+vO4AYmCTP\nQhhQ8azFmdN4Dq03teaN/5vwHzo4QL9+0LgxvHkT+Q2SOA8vL+r+1Jvv59Uk5/Ny3Lr4KOaLfHxg\n1CiYM0cbzIUQQkfSWKZhc5vNDN8/POKkR1Ry5oTvvtPKyBKTixe18bR27VhfcjJvXq7Mm0fh38vh\n/8SKNM/1sEDwS4GB2kSJkcd6SZ6FMDCHUg40KtKIru5dI74KHDoU6tTRZi78/Y0ToJF4eHnhtN6Z\nA0Wv4JevFleajuSn9evx8PKK/sJhw7StccuVM0ygQohkpUS2Ep8nPWK9fXdiLN1YvRo6dtRa0cWC\nh5cXPa5do+DrF3xMa86jBn/EbsxOCBMo2QBJnoUwipkNZ/L43WP+OP5H+A8UBf78E3Lk0EoQQkKM\nE6ARzHZz424NFYLegrXWz/lO+/bMiW6724MHtdejkycbJkghRLLkUMoBG2ubyCc9ItOypbYYPLH0\n8Q8O1rbf7tgx1pfMdnPjSvPvuJATqoe2BjPLmMfshJLkWYjky8rCik1tNjHj+Az23tkb/kMzM20G\n4PVr+OmnZNMD+onlfXiyDUqOA7P/FptEOf/+8aPWxH/+fFkkKITQuz9s/uDJ+ydMODwh5pPz54fC\nheHwYf0HpguenlCoUJw2l3pr/h6uT+RApTrUuXbv83G9vjOV5FmI5K1gxoJsbL2RDq4duPHyRvgP\nrazA1VXb6vX3340ToAHdenWLm2n2QonRYBW+Zi5lVBeNGwcVKmiLLIUQQs+sLKxw/dGVJeeWsPVa\nLEoyWrTQxvHEwNk5TguufQN9uZbWA/I5cKiKDT980SkqyjFbF0xga26Q5FkIo6pZoCaT6k6i2YZm\n+Pj5hP8wQwbYswfWr492G9TE7tXHVzRxbkKvYn2w9rgc7jPrtWsZ2Lx5xIuOHIE1a7QOJUIIYSC5\n0uXCzcGNPh59OP/0fPQnhyXPoXHc5tvQAgNh504t3lgICQ2hg2sHKuYuS+HDgZwqXpyyt29jERwc\n9ZitKyYy82zcXh9CCLqX786Vf6/QdktbdrXfhYXZF/9Z5sih7VZVqxZXHzxgsJkZAYqClariZG+P\nbd26xgtcBwKCA2ixsQUtirdgWoNpeOTyYo6rK/5osxcDHR0jfo1v32p1eYsXQ/bsxghbCJGMlc9V\nngW2C2i+oTkne5wkV7oodjQtXpwPFhaMdHDgUq5cpjtuHzyolWvkzh2r04ftG4aPnw97eu5h3+Gj\nzHF350Xq1PRetozGPXvq9+uT5FkIEWZ6w+nYrbej746+LLZbjPJlG548efAaP55ivXpRsGdPFjdr\nBsCddesATG8gjiVVVemxvQfZ02RnSv0pgPa1xPj1DBgAjRpJuYYQwmhal2zN9RfXsVtvx4HOB0hn\nlS7COR5eXjzIlIncFhbM+TSra5LjtqtrrGedF51ZxPab2zne/ThWFlb/jdkfPjC3QgXQ99dlIsmz\nlG0IYQIszCzY1HoTF55fYPSB0RE+n3r8OLUWLmTU2rV03bkTiEUnChP326HfuPnqJqtbrMZMieVQ\ntG4dnD4NM2fqNzghhIjBqJqjqJCrAi03tSQgOOKGKLPd3FjWty8tjhz5vPDb5Mbt0FBwd9fao8Zg\n161djD04Fg9HDzKnyhz+wypV4MQJPQX5BUmehRBfSmeVjp2OO9l8bTOzT4av5Q1QFO7myUO9mTMZ\nt2oV/T8tQkmsnaBnn5yN82VntjlsI3WK1LG76PJl+N//YONGSB3La4QQQk8URWG+7XzSW6Wns1tn\nQtXwtc0BisLZYsVIFRBAifv3Px83qXH71CnIlAmKFYv2tCMPjtDJrRMuP7pQJHORiCdUqADnY6gB\n1wVZMCiE+Fq2NNnw7ODJ9GPTcb7s/Pm41adZi1v58lFz1iz+t2ULw5yd9buqWU9WXljJjGMz2Ntx\nLznS5ojdRW/fan1T//wTypTRb4BCCBFL5mbmrGu5jue+z/lp10/hekBbqSooCm7Vq2uzz5+Y1Lgd\ni5KNc0/P0XJjS5xbOlMtX7XITypZEm7f1v+W5DLzLISITIGMBdjVfheD9wz+3A7Jyd4e60+1cvdz\n5qTmrFn02LyZOa9eJao+0FuvbWXE/hF4dvSkQMYCsbsoNBQ6ddLqnOPQSkkIIQwhpUVK3H504+jD\nowzfN/xzAh02brv+8AMtP/V71ns3irhQ1RiTZ++X3tg627Kw6UIaWDeI+l4pU2p9ra9f10OgXzCR\n5FkWDAphgkplL8Wu9rtovK4xoWoobeq2AQjXieKfZctoMGECDBwIs2aBublRY47JpqubcNrlxK72\nuyietXjsLxw6FN68gc2b9RecEEIkQIaUGdjbcS8N1jQgdG8o0xpM+7wocJ6rK0UePqTjqlX82LGj\n6SwWvH4d/P2hfPlIP77y7xUarmnI1PpTaVmiZcz3K1MGLl6EsmV1HOgXJHkWQkSnXK5y7Omwh0br\nGhGqhvJj3R8jDrr16kGrVtrMwfr1kCaNcYKNweqLqxm+bzieHT0pnaN07C+cOxd27IBjx0yizk0I\nIaKSJXUW9nXaR4M1DRjiOYSZDWf+143C15fVZcrovxtFXLi6agsFv+zu9Mm5p+dosq4Jf9r8Sbvv\n2sXufmHJsz6ZSPIsZRtCmLAyOcuwp8MeBu0ZxMIzCyOekCGD1tw+SxaoVQuePTN8kDFYeGYhI/eP\nZH+n/XFLnN3cYNIk2LULMmeO+XwhhDCyzKkys6/jPo48OELP7T0JCgnSPjDF3QajKNk4/vA4jdY2\nYoHtgtgnzgClS+s/eZYFg0KI2CidozR/d/2bmcdn8uv+X8MtSAG0gWT5cmjeXGsXdOGCcQL9Sqga\nyoh9I5hxbAYHuxykRLYSsb94507o1Qu2bYNChfQXpBBC6FimVJnw6uzFk/dPaL6hOR8CP0CDBtrY\n/OKFscPTPHgA9+7BDz+EO7zl2haabWjGKvtVtCgRu97Pn4XNPOtzHY7MPAshYss6szXHuh1j/z/7\n6ezWOWJPUUWB0aNh6lRtkF692jiBfuIX5IfDFgcOPzjM8e7HI29tFBVPT+jSRUucK1bUW4xCCKEv\naS3T4u7gTu50uam9sjZPg3y0sXnbNmOHpnF3h6ZNwUKr3lVVlWlHpzFozyA8O3jSuGjjuN8z1//b\nu/PgKqszjuO/k0BAggSkAcGEAJElBCyLiEqACBR1qAgpiCxKERFrQeqCndEOatsZmDplRuwUURRj\niSiyGWVRSgiUVQS1IEKVsISggIgJkEAgefvHISySwE3y3rxvku9nxhlJ7j33ucPkycO5z3lOE/u7\n6LvvXA72IhTPAEojMjxSaaPSlHc2TwmzE7Tvp32XP2joUGnVKumvf5Ueeyz4Y4OKkZmdqTuS71Bo\nSKhWPrhSkeGRgT85NdVO1Fi0yO6iA0AlVTO0pl6/53UNajtIN79+s77u0dY/rRsXtWzknsnVQ6kP\n6Z1t72jDmA3q1KRT2dY0RurQwc7kDxaKZwClVadmHc0bPE/3x9+vbrO66eNvP778Qe3b21v4vvtO\nSkiQdu2qsPiWfrNUXV/vqqS4JKUkpah2jVJMNJ05U3r0UWnJEql79+AFCQAVxBij53o+pzcHvKkB\n2TN1etW/5eTkeBvU0aPSli1Sv37a9cMu3TrrVuUX5GvtQ2sVVS+qfGu3bRvc3zkUzwDKwhijp25/\nSvOGzNOY1DF68uMnlXsm99IHRURICxdKo0fbQvSf/wxqH1rumVw9sfwJjftonObfN1/PdH8m8Cu3\nCwqkZ5+VXnpJWrNG6to1aHECgBfuvPFO/XvCZm1pUVtTnuupAzkHvAvmww/l9OmjmV+9rYTZCRp/\ny3jNGTRHdcPqln/tNm2CWzxzYBBAefSM6akvH/1Sh04eUqeZnbR2/9pLH2CMbd1Yt0566y17ycju\n3a7HsXrvat004yYdzj2sL8Z9oYRmCYE/+cgRG9fGjXYc3Y2l6I0GgEokpn6Mbhk/RQN2FKrzzM6a\n/fnsy670rggn30/R1MideuPzN5Q+Kl2PdHlEpphxdWXStq20c6c7axWHnWcA5dWwTkOlJKVoSp8p\nGrZgmIYtGKb92fsvfVCbNraA7ttX6tZN+vOf7WD8ctr7014NnT9UIxeN1LQ7pyklKUUN6zQMfIGV\nK+2BwJtvtocEGzUqd0wA4Gc1BiWp/Zb9WnHfR5rx2Qzd/sbt2nhgY4W8ds7pHE3+8CkVrFypOgPv\n0/ox6xXfKN7dF6F4rjjGmCHGmK+MMQXGmOKvugFQoqS4JO38/U61vq61Os3spInLJl5aRNesKU2a\nJG3dasclxcdLKSm2ZaKU9v20TxOXTVSX17ooPjJeO3+/UwPaDAh8gexsO4Zu9Gjb5zxlyvkT36gc\nyNlAGTVuLLVvr19+9YM2PrxRj3V9TIPnDVbSe0nanLU5KC+ZczpHL617SW3+0UaRa7cq7LYETbz7\nBdUICULejY6Wjh2Tjh93f22J4vlntkkaJGmN14EAlVV4WLhevONFbfvdNoWFhqnjqx01cuFIpe1J\nu/DRYLNmthd61ix7e1/HjvbU9VWK6ILCAq3MWKkRC0eo82udVatGLW3/3XZN7jVZ4WEB3mp45ow0\nY4YUF2dbSrZvty0bqIzI2UBZnbswJcSE6MFfPqhd43cpsXmikuYlqc/bfTR321zlnckr98tsO7RN\nT3/ytFq83EKff/+5lo9YrgkHo1R78FAX3kQJQkKk1q2D1/fsk+LZXHbhgoeMMaskPeU4ztYSvu/4\nKV7Az37M+1HJXyQr+ctkHTt1TPe0vkd9W/ZVr5heanBNA3uAcMkS28Zx9Kg0YYLdDY6IOP/81XtX\nK21PmhbtXKRG4Y30wE0P6KFODymidkTggeTmSu+8I/3tb1JMjJ1F3bn6bVYaY+Q4jkuNhf5AzgbK\nICNDuu026eBBKTT0/JfzC/I1f8d8JX+ZrM1Zm3V3q7v1q5a/Up8WfRRVL+qqfcl5Z/K04cAGrdqz\nSqn/S9WxvGMa3mG4xnUZpxYNWtjDdtdfbzcumjYN3vu7/347Q3rkSPfXHjzYjmQdMsT9tYtRUt6m\neAaqgW2Htmn5t8u1ImOF1meuV/3a9RUXGacmdZsoIqye2u7OVreFm9Ru815tat9A78Sd1eLmp9Tl\nxh7q3aK3+rfqX7reuMJCOy7v/fel5GQ7s/mJJ6TevYP3Jn2O4hnAeR07StOnSz17FvvtrJwsLf1m\nqVZkrNCqvatUUFigdpHtFFM/RhG1IlQ3rK7yC/J1Iv+Evj/xvXYd3aXM7Ex1atJJdzS/Q3fG3qke\nMT0unXq0bJm9A2DduuC+t+eft78D/vIX99e+5x5p7FhpQClaBcuhpLxdYY2GxpgVkq4v5lvPOo7z\nYaDrvPDCC+f/PzExUYmJieWODajqOjTuoA6NO2hS90kqdAq1P3u/vj7ytQ6fPKzs09k6HpGrDd1u\n0a6Theq4PkPTV3ym1+Z/KdM5V0o8IX33tRQfYq/Krv2z2c2OI/3wg73q9bPPpE2b7GHA8HDpN7+R\nNmyollM00tPTlZ6e7nUYZUbOBoJoyBDpvfdKLJ5vqHeDxnYZq7FdxspxHB3JPaIdR3boQM4BZZ/K\n1vH846pdo7bqhtXVL+r8Qm0atlHsdbEKC73CGLcFC2xODra2bW17YDAEuW0j0LzNzjOA4p08aXco\n1qyxH/Nt3y7t329nbDZoYB9z5oyUkyNdc43tp+7c2U706NHD9jbjPHaeAZyXkWE/kcvKsge6g+3s\nWXt99ubNUvPmwX2tLVukMWPs4XS39eolvfiiVEH/CPd857kUqtQvF6DSCg+X+vWz/xVxHOnECenH\nH+3BkBo1pHr17GNRXZGzgdJq2VKKjbWf0lXEwek1a+yZk2AXzpJ9b7t3298Xbs2PLuKTA4O+mLZh\njBlkjMmUdKukJcaYZV7HBKAYxkjXXmuTcHS03cmgcK52yNmAC4YPt4epK0JFtWxI9pPJmjXtJVhu\n88kNg75q27gaPgIEUFlVxbaNqyFnA1dw6JDtD87KkurUCd7rFBZKUVFSerodI1cRunaVXnnFtqa4\nKT7e9oq3b+/uuiUoKW/7YucZAACgWmnc2BaZH30U3NdZt05q2LDiCmfJtqTs3u3+urRtAAAAVGPD\nh9vbXoMpJUUaMSK4r/FzRX3PbqN4BgAAqMaSkqTVq6XDh4Ozfn6+NH++LdIrUmysnSjitlOnLh+X\n6gGKZwAAAC/UqycNHCi9/XZw1l+2zPYHN2sWnPVLEqy2jVOn7GhUj1E8AwAAeGXsWGnWLDvazW1z\n5gTnmuyrCVbxnJfHzjMAAEC1dvvtdm7+2rXurvvTT9Inn0iDB7u7biCaNrX3AeTmurfm2bP2Hxg1\nvL+ihOIZAADAK8ZIDz9sd5/dNHeuveSqfn131w1EaKi9kGXPHvfWLGrZcPvilTKgeAYAAPDSAw9I\nqanuXSziONKrr0rjxrmzXlm0bOnuoUGftGxIFM8AAADeioy07RUzZriz3qZNtmWid2931iuLmBhp\n3z731vPJYUFJ8r5xBIBvLUlL0/TFi3XaGNVyHD0+cKD6e5mMAaCqevJJKTFRmjSpzEViUc5+YsUK\nZTZurKbp6d7lbLeLZx/tPFM8AyjWkrQ0TZw7V7svGq6/+9wwfwpoAHBZXJy9cfBf/5IeeaTUTy/K\n2Xn9+umWt97SiKlT1WDuXEke5eyYGGnrVvfW88mMZ4m2DQAlmL548SWFsyTtHjFCr3zwgUcRAUAV\n9/TT0t//LhUUlPqpRTn7DwsW6O1+/fRjRIS3ObsKt21QPAMo1ukSTjSfquA4AKDa6NVLatTI7j6X\n0mljVP/4cY1ZulTThgw5/3XPcnYVbtugeAZQrFolDOz3R+oCgCrIGGnqVOn55+1OaynUchw98+67\nWpSQoMzGjc9/3bOc3aSJdOxYqd9Hidh5BuB3jw8cqNhzPc5FYufM0YR77/UoIgCoBrp3lzp2lF5+\nuVRP++Ntt+nRBQs0efTo81/zNGeHhEhRUdL+/e6s56OdZw4MAihW0QGTVxYt0inZ3YsJw4dzWBAA\ngm3aNKlbNykpSWrVKqCn9E5N1f/uu08d1q5VK/kkZxe1brRuXf61fLTzTPEMoET9e/emWAaAihYb\nKz33nL15MC3N3th3JR98IH36qVr/979aHh5eMTEGws2+Zx/tPNO2AQAA4DePP25bH/70pys/LiPD\n3iSYnCz5qXCW3C2eGVUHAACAEoWGSvPmSe+/b8fXFScrS+rf3xbYCQkVG18g3C6efdK2QfEMAADg\nR5GR0qpV0qxZ0qhRtliWpMJCKTVVuvVW6be/lcaP9zTMEjVvXiXbNuh5BgAA8KvoaGnzZmnyZKld\nO+n66+0IuKZNpdmzpb59vY6wZFV059k4Jcxy9SNjjFOZ4gWAIsYYOY5T/M0zVRQ5G3DZ6dPSt99K\n9erZotrv8vOla6+VTp6UapRzv3bSJLsT/8wz7sQWgJLyNm0bAAAAlUGtWlJ8fOUonCUpLMwWvAcP\nln8tH+08UzwDAAAgONxq3WDaBgAAAKq8Zs3cuWXQRwcGKZ5/Jj093esQAFQwfu4rN/7+AB+LipIO\nHCj/Ohe1bXj9M0/x/DNe/4UAqHj83Fdu/P0BPhYdLWVmln+di3aevf6Zp3gGAABAcARh59lrFM8A\nAAAIjqgod3aefXRgsNLNefY6BgAoq+o459nrGACgPIrL25WqeAYAAAC8RNsGAAAAECCKZwAAACBA\nFM8AAABAgCieL2KMucsYs9MY840x5o9exwMguIwxbxpjDhljtnkdC0qPnA1UL37J2RTP5xhjQiX9\nQ9JdktpJGmaMifM2KgBBNlv2Zx6VDDkbqJZ8kbMpni+4RdK3juPsdRznjKR3Jd3rcUwAgshxnP9I\nOuZ1HCgTcjZQzfglZ1M8X3CDpIuneB849zUAgP+QswF4guL5AgZeA0DlQc4G4AmK5wuyJEVf9Odo\n2Z0MAID/kLMBeILi+YLPJLUyxjQ3xoRJGiop1eOYAADFI2cD8ATF8zmO45yVNF7Sx5J2SHrPcZyv\nvY0KQDAZY+ZKWi+ptTEm0xgz2uuYEBhyNlD9+CVnG8ehbQwAAAAIBDvPAAAAQIAongEAAIAAUTwD\nAAAAAaJ4BgAAAAJE8QwAAAAEiOIZAAAACBDFMwAAABAgimcAAAAgQBTPAAAAQIAongEAAIAAUTwD\nAAAAAarhdQCAl4wxrSX1kHSdpAJJeZLiJH3qOM4cL2MDAFyOvA2vUTyj2jLGGEl3OY4z3RjTSFKG\npGhJ4yQd9TQ4AMBlyNvwA+M4jtcxAJ4wxoRIquM4zgljzEBJDzuO82uv4wIAFI+8DT9g5xnVluM4\nhZJOnPvj3ZI+liRjTE1JIY7jnPYqNgDA5cjb8AMODKLaMsZ0NcZMM8bUkvRrSZvOfWuUpJreRQYA\nKA55G35A2waqLWNMH0ljJG2UdFxSvKQdkr5yHGfTlZ4LAKh45G34AcUzAAAAECDaNgAAAIAAUTwD\nAAAAAaJ4BgAAAAJE8QwAAAAEiOIZAAAACBDFMwAAABAgimcAAAAgQBTPAAAAQID+D53JOpwKhYL6\nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa7b0557550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(2, 2, figsize=(12, 8))\n",
    "\n",
    "axes = axes.flatten()\n",
    "Ms = [0, 1, 3, 9]\n",
    "\n",
    "for ax, M in zip(axes, Ms):\n",
    "    # 计算参数\n",
    "    coeff = np.polyfit(x_tr, t_tr, M)\n",
    "    \n",
    "    # 生成函数 y(x, w)\n",
    "    f = np.poly1d(coeff)\n",
    "    \n",
    "    # 绘图\n",
    "    xx = np.linspace(0, 1, 500)\n",
    "    ax.plot(x_tr, t_tr, 'co')\n",
    "    ax.plot(xx, np.sin(2 * np.pi * xx), 'g')\n",
    "    ax.plot(xx, f(xx), 'r')\n",
    "    ax.set_xlim(-0.1, 1.1)\n",
    "    ax.set_ylim(-1.5, 1.5)\n",
    "    ax.set_xticks([0, 1])\n",
    "    ax.set_yticks([-1, 0, 1])\n",
    "    ax.set_xlabel(\"$x$\",fontsize=\"x-large\")\n",
    "    ax.set_ylabel(\"$t$\",fontsize=\"x-large\")\n",
    "    ax.text(0.6, 1, '$M={}$'.format(M), fontsize=\"x-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通常我们为了检测模型的效果，会找到一组与训练集相同分布的数据进行测试，然后计算不同模型选择下，训练集和测试集上的 $E(\\mathbf w^\\star)$ 值。\n",
    "\n",
    "注意到随着测试点数目的变化，$E(\\mathbf w^\\star)$ 的尺度也在不断变化，因此一个更好的选择是使用 `root-mean-square (RMS)` 误差：\n",
    "\n",
    "$$\n",
    "E_{RMS}=\\sqrt{2E(\\mathbf w^star) / N}\n",
    "$$\n",
    "\n",
    "`RMS` 误差的衡量尺度和单位与目标值 $t$ 一致。\n",
    "\n",
    "我们用相同的方法产生100组数据作为测试集，计算不同 $M$ 下的 `RMS` 误差：|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa7b0557750>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_te = np.random.rand(100)\n",
    "t_te = np.sin(2 * np.pi * x_te) + 0.25 * np.random.randn(100)\n",
    "rms_tr, rms_te = [], []\n",
    "\n",
    "for M in xrange(10):\n",
    "    # 计算参数\n",
    "    coeff = np.polyfit(x_tr, t_tr, M)\n",
    "    # 生成函数 y(x, w)\n",
    "    f = np.poly1d(coeff)\n",
    "    \n",
    "    # RMS\n",
    "    rms_tr.append(np.sqrt(((f(x_tr) - t_tr) ** 2).sum() / x_tr.shape[0]))\n",
    "    rms_te.append(np.sqrt(((f(x_te) - t_te) ** 2).sum() / x_te.shape[0]))\n",
    "\n",
    "# 画图\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "ax.plot(range(10), rms_tr, 'bo-', range(10), rms_te, 'ro-')\n",
    "ax.set_xlim(-1, 10)\n",
    "ax.set_ylim(0, 1)\n",
    "ax.set_xticks(xrange(0, 10, 3))\n",
    "ax.set_yticks([0, 0.5, 1])\n",
    "ax.set_xlabel(\"$M$\",fontsize=\"x-large\")\n",
    "ax.set_ylabel(\"$E_{RMS}$\",fontsize=\"x-large\")\n",
    "ax.legend(['Traning', 'Test'], loc=\"best\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到 $M = 9$ 时，虽然训练集上的误差已经降到 `0`，但是测试集上的误差却很大。\n",
    "\n",
    "我们来看看 $M = 9$ 时的多项式系数，为了更好的拟合这些点，系数都会变得很大："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w_9, 117814.76\n",
      "w_8, -541415.20\n",
      "w_7, 1045489.00\n",
      "w_6, -1101026.25\n",
      "w_5, 686023.94\n",
      "w_4, -256186.58\n",
      "w_3, 55193.76\n",
      "w_2, -6165.04\n",
      "w_1, 271.33\n",
      "w_0, 0.08\n"
     ]
    }
   ],
   "source": [
    "for i, w in enumerate(np.polyfit(x_tr, t_tr, 9)):\n",
    "    print \"w_{}, {:.2f}\".format(9 - i, w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另一个有趣的现象是查看当训练数据量 $N$ 变多时，$M = 9$ 的模型的表现："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa7b0557dd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n",
    "\n",
    "axes = axes.flatten()\n",
    "\n",
    "for ax, N in zip(axes, (15, 100)):\n",
    "    # 生成 0，1 之间等距的 N 个 数\n",
    "    x_tr_more = np.linspace(0, 1, N)\n",
    "\n",
    "    # 计算 t\n",
    "    t_tr_more = np.sin(2 * np.pi * x_tr_more) + 0.25 * np.random.randn(N)\n",
    "    # 计算参数\n",
    "    coeff = np.polyfit(x_tr_more, t_tr_more, M)\n",
    "    # 生成函数 y(x, w)\n",
    "    f = np.poly1d(coeff)\n",
    "    \n",
    "    # 绘图\n",
    "    xx = np.linspace(0, 1, 500)\n",
    "    ax.plot(x_tr_more, t_tr_more, 'co')\n",
    "    ax.plot(xx, np.sin(2 * np.pi * xx), 'g')\n",
    "    ax.plot(xx, f(xx), 'r')\n",
    "    ax.set_xlim(-0.1, 1.1)\n",
    "    ax.set_ylim(-1.5, 1.5)\n",
    "    ax.set_xticks([0, 1])\n",
    "    ax.set_yticks([-1, 0, 1])\n",
    "    ax.set_xlabel(\"$x$\", fontsize=\"x-large\")\n",
    "    ax.set_ylabel(\"$t$\", fontsize=\"x-large\")\n",
    "    ax.text(0.6, 1, '$N={}$'.format(N), fontsize=\"x-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，随着 $N$ 的增大，模型拟合的过拟合现象在减少。\n",
    "\n",
    "当模型的复杂度固定时，随着数据的增加，过拟合的现象也在逐渐减少。\n",
    "\n",
    "回到之前的问题，如果我们一定要在 $N=10$ 的数据上使用 $M=9$ 的模型，那么一个通常的做法是给参数加一个正则项的约束防止过拟合，一个最常用的正则项是平方正则项，即控制所有参数的平方和大小：\n",
    "\n",
    "$$\n",
    "\\tilde E(\\mathbf w) = \\frac{1}{2}\\sum_{i=1}^N \\left\\{y(x_n,\\mathbf w) - t_n\\right\\}^2 + \\frac{\\lambda}{2} \\|\\mathbf w\\|^2\n",
    "$$\n",
    "\n",
    "其中 $\\|\\mathbf w\\|^2 \\equiv \\mathbf{w^\\top w} = w_0^2 + \\dots | w_M^2$，$\\lambda$ 是控制正则项和误差项的相对重要性。\n",
    "\n",
    "若设向量 $\\phi(x)$ 满足 $\\phi_i(x) = x^i, i = 0,1,\\dots,M$，则对 $\\mathbf w$ 最小化，解应当满足：\n",
    "\n",
    "$$\n",
    "\\left[\\sum_{n=1}^N \\phi(x_n) \\phi(x_n)^\\top + \\lambda \\mathbf I\\right] \\mathbf w = \\sum_{n=1}^N t_n \\phi(x_n)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEOCAYAAACAfcAXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd0FUUfxvHvUkJHmoIg8EIoIqAUkQ6hhtASeomogCgt\nCShFQRAbIhYgoUuREkCKJGIogiHSQVCkChgUadJrIECSff9YJCBFSpK95fmc4zlm7t6bJ3rO/O7O\nzM4YpmkiIiLuJ5XdAURExB4qACIibkoFQETETakAiIi4KRUAERE3pQIgIuKm0tgd4EEYhqE1qyIi\nD8E0TePfbU5VAABS8rmFIUOGMGTIkBT7fSLiHlK6bzGM2/p+QENAIiJuSwVARMRNqQDcg5eXl90R\nRMQFOUrfYjjTXkCGYZjOlFdExBEYhnHHSWDdAYiIuCkVABERN6UCICLiplQARETclAqAiIibUgEQ\nEXFTKgAiIm5KBUBExE053WZw4poiIiMJDgvjimGQzjQJ9POjUe3adscScWkqAGK7iMhIgmbPJtrf\n/0ZbdGgogIqASDLSEJDYLjgs7JbOHyDa35+Q8HCbEom4BxUAsd2Vu+xVHpvCOUTcjQqA2C7dXTb4\nS5/COUTcjQqA2C7Qzw/P62P+//CcOZMAX1+bEom4B20HLQ4hIjKSkPBwYrG++Qf4+moCWCSJ3G07\naBUAEREXp/MARETkFioAIiJuSgVARMRNqQCIiLgpFQARETelAiAi4qZUAERE3JQKgIiIm1IBEBFx\nUyoAIiJuyqEKgGEYUwzDOGYYxna7s4iIuDqHKgDAVKCB3SFERNyBQxUA0zRXA2fsziEi4g4cqgCI\niEjK0aHwckNEZCTBYWFcMQzSmNdoVKcUWfOn48C5Axy5cIRzV84RnxCPYRhkT5+dXBlz4Zndk6dz\nPU3ZJ8uS2SOz3X+CiDwApysAQ4YMufHvXl5eeHl52ZbFlURERtJt3lgOVswCZ7bAxX2s3pSRakfK\nU6NEVV7I9wKPpXuMtKnTkmAmcObyGY7HHGftwbVM+mUSO47v4JnHn6F+4fo0K9GM8k+Wx7jLWb8i\nkryioqKIior6z+sc7kAYwzD+BywyTbP0HV7TgTBJ7FzsOaZuncrgiKFcyGjC416QowLp0xen2JET\nNF60iI9atIBTpyA+3npT2rSQK5f1T4ECUKQIsUY8mw5vYvG+xXyz+xvizXi6lu9Kx7IdyZUxl61/\no4i7c4oTwQzDmA3UBHICx4HBpmlOvel1FYAkcvTCUUZuGMmkXybhXbg+l747wZPZSuL16zbK7dvH\nUydOsP/JJ4kxTV6oUQNy5IA0acAw4OpVOHkSTpyAAwfg4EEoXBgqVICaNTFr1mSTxwnGbR5H2G9h\ntC7ZmndqvEOBxwrY/WeLuCWnKAD/RQXg0V28epHha4czZtNo+mesz+vR2Xns22UcO3mSJVWqsLJM\nGX56+mn2PfUUcWnS4L1wIUtHjbr3h8bGwm+/wYYN8OOPEBUFOXNCy5acaVyXT88tZsKWCbQr1Y7B\nNQfzRKYnUuRvFRGLCoCbM02T0O2hDInoy1t/FeSlNRfwuBQLbdtCq1ZEnDpF0Jw5RPv733iP58yZ\njGrf/sEPZ09IgI0bYf58+PprKFCA8x3b88ETv/HV3q/5sNaHdCnfhVSGFqGJpAQVADd2+Pxhes/t\nhFf4r3RZd4W01WpAz55Qpw6kSuyEIyIjCQkPJxZIDwT4+j545/9vcXGweDGMHw8//8zRV9vQ4ckN\nXExn8JXfVzyd6+lH+3wR+U8qAG5q7k/T+H1Qd4I2QHrfFqR+ZxAULWpPmJ074aOPMJcvZ2PrKrTK\nt5aB9T/k9fKva8WQSDJSAXAzsdcuM32wLw0nriRTFS+yfzHWvo7/3/buhbff5tpPGxhU34Pf6jzL\nV82mkS19NruTibgkFQA3cmjbWg629SHfRYOcX4aSybux3ZHubNUqEnr3Yl/8Cbr7pmF0z8WUeLyE\n3alEXM7dCoBm4VyJabL/k7fIUKUG8TWrkz/6pON2/gA1apBq4yaKvxhERPBJQjtX4NtdC+1OJeI2\ndAfgKk6d4kiL+hz/fRtnx43Aq0lPuxM9mH37ON+hDb8d28HekCG82HiA3YlEXIbuAFzZhg2cL12M\nRezFWLfO+Tp/gKJFybpuM56vvEGD9oMJ/aA1KvYiyUt3AM7MNCEkhJh3B/BG80z0/2w9hbMXtjvV\nIzsdGUFs6+b8VqUYXvM3k8ojnd2RRJyaJoFdzbVrmD17cuz7hbz0Slam9v6RfFnz2Z0qyVz4+y+2\neZchl5meopG/kirX43ZHEnFaGgJyJefOYTZuzN6fl9Mq6ElC+6x3qc4fIEueAjy7fj+bn0rFydKe\nJOzcYXckEZejAuBsDh2CqlXZnPEsbV7OSNhrkTyeyTW/HWfJmA3fsN+Y1DgvF6tWIGHZUrsjibgU\nFQBnsn8/1KjBqpr/w7/WaZa+soKcGXPanSpZZfbITNCYLfTvVoSYti0wZ82yO5KIy1ABcBa7d0PN\nmqxpU4WXi+3kh5cjyZM5j92pUkQmj0x8NPhHOvR4kgu9u0NIiN2RRFyCJoGdwdat4OPDL2+0p2Gq\nWazuuJoiOYrYnSrFHT5/mDafVSRi2jUee6UrDBlinU8gIvekSWBntXMn+PgQ/V4vvJlBWJswt+z8\nAfJlzceUoEiqdjQ5P2c6DBpkLYUVkYeiAuDI9u0Db29OvP8WNS4G82WTL6n4VEW7U9mqWM5ifNk5\nnBfanufyN3PhnXdUBEQekgqAozpwAOrW5dLA/tS8OoG3qr6F79O+dqdyCJXzV2ZIqzFUbn+Ja+EL\nYeBAFQGRh5DG7gByBydOQL16JPTuTevHllE7W20CKgbYncqhtC3Vlr2n9tIoUxhLpywiVaZMViEQ\nkfumSWBHc+mSdVJX7doMqpOKVX+tYkWHFaRNndbuZA7HNE1eXPgi2c5cZvTQXzH69IFu3eyOJeJw\nNAnsDOLjwd8fihRhQfuyTN82nXmt5qnzvwvDMJjUZBLr4v5g2qf+8OGH1hnEInJfNATkKEwTeveG\n8+fZETyIrnO8Weq/lCcyPWF3MoeWIW0Gvmn9DZUmV+LZqcMp1yEQsmUDb2+7o4k4PN0BOIqxYyEy\nkrOzpuC3sDUjvUdSPm95u1M5hULZCzHNbxpNdgzgZOiX0KEDbNlidywRh6c5AEfw44/QujXm2rW0\n+vkt8mTOw+iGo+1O5XQ++PEDlkUvY2W2INIG9ob16yF/frtjidhO20E7qr/+gooVYfp0Rj+2h6lb\np7K201rSp0lvdzKnk2Am4DvHl6I5ivLF9rwwYwasWQNZstgdTcRWmgR2RJcugZ8f9OnD5pLZef/H\n95nbcq46/4eUykjFV75fMX/XfBY3LQGVKkGbNhAXZ3c0EYekAmAX04QuXeCZZzjbvRNt5rdhTMMx\neObwtDuZU8uZMSehzUPp9G1njnw8wOr8e/WyO5aIQ9IQkF3GjIFJkzDXrqV1xMs8kfEJxjQaQ0Rk\nJMFhYVwxDNKZJoF+fjSqXdvutE7n/R/fJ+rPKJY3nU/qylXgzTetgivihjQH4Eh++QXq14d165h6\ncQ0jNoxgU5dN/LBqHUGzZxPt73/jUs/QUEa1a6ci8IDiE+KpM70O9QrXY+ATLaB6dVi0yBoWEnEz\nmgNwFBcuQOvWEBJCdM5U9FvRj9DmoaRPk57gsLBbOn+AaH9/QsLDbQrrvFKnSs3M5jMJ2RTCukyn\nYfJkaNkSjh61O5qIw1ABSEmmCa+/DrVqEde6JR0WdmBAtQGUzl0agCt32ds+NiUzupCnsj7F+Mbj\neWnhS1xsUNsaAmrVCq5etTuaiENQAUhJU6bA9u0wciTD1gwjY9qMBFUKuvFyursMb2lN0MPze9qP\n6gWr0+f7Ptb5AblyaVJY5DoVgJTy22/w1lswdy6bzuwgZFMIX/l9RSoj8X9BoJ8fnqGht7zNc+ZM\nAny1DfSjGOk9kqW/L2VJ9DKYPh1WrIDZs+2OJWI7TQKnhGvXoEoV6NSJmM4vUXZCWT6s/SGtS7a+\n7dKIyEhCwsOJxfrmH+DrqwngJLDyj5W8uPBFtnXdRs69B6FePeshseLF7Y4mkuy0CshOQ4bAxo2w\neDEBSwI5E3uGmc1n2p3K7byx7A0OXzjMnBZzMCZOtPZf2rABMmSwO5pIslIBsMtPP0HjxvDLL/x4\ndR/tv2nP9m7byZEhh93J3M7la5cpP7E8g2oMol2pttbW25kzw8SJdkcTSVZaBmqHS5esnSmDg7n0\neDY6f9uZcY3GqfO3SYa0GZjRbAZBS4P4O+YYTJhgbcT3r3kXEXehO4DkFBgIJ0/CrFn0XtqbE5dO\naOjHAQz8YSC/nfqNBa0XwLZt1glsmg8QF6YhoJS2ahW0awc7drD2wi5azWvF9m7byZkxp93J3F5s\nXCxlJ5Tlg1of0PKZljB+PHz5pbV9tIeH3fFEkpyGgFJSbKz10NHo0VzOnJ6O4R0Z03CMOn8HkT5N\neqY0nULgkkBOXTplPZyXLx+8+67d0URSlO4AksOAAbBvH8ybR5/v+3D4wmFmt9C6c0fTa2kvTl8+\nzfRm0+H4cShTBmbNAi8vu6OJJCkNAaWUrVutjd62bWND3J80+7oZ27ttJ1fGXHYnk3+JuRpD6XGl\nGd1wNA2LNoTFi6FbN+v/YfbsdscTSTIaAkoJcXHQuTN88gnXHs9Jl0VdGOE9Qp2/g8rkkYkvm3xJ\n1++6cv7KeWjYEJo2tYqAo3/REEkCKgBJacQIyJEDXnmFz9Z9Rv6s+WlTso3dqeQe6hSug7enN/2W\n97Mahg+39muaqdVa4vo0BJRU/vwTnn8eNm0iOptJxUkV2fzaZv6X7X92J5P/cDb2LCXHlmRuy7lU\nLVDVGgKqVw82bYJCheyOJ/LINASU3Hr1gl69MAsVomtEV96q9pY6fyeRLX02RnqP5PXvXudq/FVr\nMrhvX+jUCRIS7I4nkmxUAJJCRATs2gV9+xK6PZSTl07Sq5K2HHYmLZ9pSYHHCvDF+i+shjfftJbz\njh1rbzCRZKQhoEd1+TKULAnjx3OyWjlKjS3FonaLqJCvgt3J5AH9ceYPKnxZgU1dNlE4e2HYsweq\nVrU2jCtSxO54Ig9NQ0DJ5eOPoXx5qF+fvsv70rZUW3X+TqpQ9kL0rdKX7hHdMU3T2hpi4EANBYnL\nUgF4FPv2WUMEI0aw8o+V/LD/Bz6o9YHdqeQRvFHZ2jJ67s65VkNgoLUkNCTE3mAiyUBDQI+iYUOo\nVYvY3gE8O+5ZPqv/GU2LN7U7lTyi9QfX02JuC3b12EW29Nng99+hUiVYtw6KFbM7nsgD0xBQUluy\nBKKjISiIj1d/TOncpdX5u4jK+SvTtHhTBvwwwGooUsTaJ6hjR4iPtzecSBLSHcDDuHYNnnsOPvmE\n36uWoNKkSmztupWnsj5ldzJJImcun6Hk2JIsaL2AyvkrW3MAtWtDkybWCiERJ6I7gKQ0YQLky4fZ\nqBGBSwLpX7W/On8Xkz1Ddr7w/oLXv3uda/HXIFUqmDLFmvTft8/ueCJJQncAD+rMGWt1yA8/sDDN\n7wyMHMjWrlvxSK195F2NaZp4z/TGp4gPvSv3thpHjoSwMIiMtIqCiBPQHUBSef99aNGCmOKF6bWs\nF2MajlHn76IMwyDEJ4SPVn/EkQtHrMaAAOvZj8mT7Q0nkgR0B/Ag9uyBatVg1y4GbhvJH2f/YFaL\nWfblkRQx4IcBHDh3gNDm188O3r7dmg/49VfIm9fecCL3QecBJIUmTaBmTfa80oSqU6qyrds28mZR\nB+DqYq7G8MzYZ5jmNw2v/3lZjYMGWdt/LFhgazaR+6EhoEf1ww+wezdmz54ELAlgYPWB6vzdRCaP\nTIzwHkGPxT2sCWGAd96xCsA339gbTuQRqADcj4QE6N8fhg5lwf7vOHrxKD1f6Gl3KklBzZ5uRv6s\n+Rm1cZTVkC6ddZB8QACcPWtvOJGHpAJwP+bPB+Bi0wb0XtabsQ3HkjZ1WptDSUr6Z0J42JphHDp/\nyGqsVg38/KBfP3vDiTwkzQHcQURkJMFhYVwxDDLGxTEvPJxMX31Ff3M5Ry8etQ4RF7f0TuQ7/H76\nd+a0nGM1nD8PpUrB9Ok6TF4cluYA7lNEZCRBs2fzffPm/NisGQU9PPgFGHf5L6ZsncLwesPtjig2\nGlB9ABsObeCH/T9YDVmzwpgx0KWLtTxUxImoAPxLcFgY0f7+AGS6fJlBM2YQOGgQ72x8l8E1BpMn\ncx6bE4qdMqbNyKgGo+i5pKd1ehhYq8PKloWhQ+0NJ/KAVAD+5YqReJfUa/58Vj37LL9kP8xVI5Zu\nFbrZmEwcRdPiTSmcvTAjN4xMbBw5EsaPh9277Qsm8oBUAP4l3fU5hpznztFr/nzeebkdRI/jmUu1\nSJMqjc3pxBEYhkFwg2CGrx3OwXMHrca8ea0dQ7t1s84PEHECDlUADMNoYBjGb4Zh7DMMo78dGQL9\n/PAMDWXgzJl8XasW0XHLyXI6O4MbdbUjjjgozxye9KjQgze+fyOxsVs3iImBadPsCybyABxmFZBh\nGKmBPUBd4DDwE9DONM3dN12TYquANowaxU950rAyzxKmVJ6Bf4MWyf57xblcvnaZkmNLMr7xeOp7\n1rcaf/7ZOihoxw7IlcvegCLXOfxWEIZhVAbeNU2zwfWf3wIwTXPYTdek2FYQpmniNc2LtiXbauxf\n7mrRnkX0Wd6HbV23kS5NOquxVy9reeiUKfaGE7kuSZaBGobR+qZ/f8IwjFpJEe66fMDBm34+dL3N\nFqHbQ4m5GsNr5V+zK4I4gSbFm1AsZzE+X/95YuMHH8Dy5bBq1X++PyIyEu/AQLyCgvAODCQiMjIZ\n04oj2HR4E2djHePp8f+c1TQMowlQG1gCFPmn3TTN44ZhFDMMo7VpmnOTIMt9fbUfMmTIjX/38vLC\nK5kevtl1YhdjGo4hdarUyfL54jpGNRhFhS8r4F/an4LZCkKWLDBqFHTtClu3gsedtwv/55mTf5Yd\nA0SHWjuONqpdO0WyS8o6F3sO3zm+hLUJo+JTFZPt90RFRREVFfWf1/3nEJBhGDmBToA3UBVYB6y4\n/s8WoINpmo8862UYRiVgyE1DQG8DCaZpfnLTNfYfCCNyB+//+D5b/97KN22ubw5nmtC0qXWY/MCB\nd3yPd2Ag3zdvfnv7woUsHTUqOeOKTXot7UXM1Ri+bPpliv7ehx4CMk3zlGman5qmWRf4AvgUyA1M\nA84DrZIo42agqGEY/zMMwwNoA3ybRJ8tkqz6Ve3HtmPbWLJvidVgGDB6NIwYAdHRd3zPzc+c3Cw2\nuUKKrbYf286s7bP4uO7Hdke54UGXgW4wTXOpaZq9TNN8BigINE2KIKZpxgE9gWXALuDrm1cAiTiy\n9GnSE+ITQsCSAGLjrnfhBQtau8h2737HZwPS3eVuNn1yBhVbmKZJj8U9eM/rPXJldJzVYQ9UAEzT\nXPSvn0+ZppmQVGFM01ximmZx0zSLmKbpOGVS5D74FPWhdO7SfLr208TGXr3g6FH4+uvbrv/nmZOb\nec6cSYCvb3JHlRQ2a/ssYq453qISh1kGej80ByDJ4ebdX9OZJoF+fg89CXvg7AHKTSzH5i6bKZS9\nkNW4bh20bGkdIJMt222/OyQ8nFisb/4Bvr6aAHYx56+cp8SYEsxvNZ/K+SvbksHhnwO4HyoAktTu\ntBLHMzSUUe3aPXRHPHT1UDYc2sC37W6awnr9dUidGsaOfdTI4mTeXPYmZ2LPMMXXvudCtB20yB3c\nvPvrP6L9/QkJD3/oz3yz8pvsObWHRXtuGjEdNgwWLoSNGx/6c8X57Dy+k+nbpjOs7rD/vtgGKgDi\n1pJjJU66NOkI8QkhaGkQl69dPyMge3b47DPr2YC4uEf4dHEWpmnSc0lP3q35Lk9kesLuOHekAiBu\nLblW4tT3rE/5vOUZtuamb37t20POnBAS8oifLs5g1vZZnIs9R7fnHXcrGRUAcWvJuRJnhPcIxvw0\nht9P/241GIY1B/DRR3Dw4L3fLE7tbOxZ+i7vy7hG4xx6NwFNAovbS86VOMPXDifqzygi2kdg/DPc\nNGQIbNsG33yTJL9DHE/A4gCuxl9lQpMJdkcBtApIxBZX469SZnwZhtYZit/TflZjbCw8+yx8/rl1\nnKS4lC1HttBoViN2dt9Jzow5b3ktKZccPwitAhKxgUdqD0Y3HE3Q0iBirsZYjenTW0NBAQHWATLi\nMuIT4ukW0Y2P63x8x86/74wZtNy/n9jixfm+eXOCZs+2dQdYFQCRZFa7UG2q5K/C0NU3HRpfty5U\nqwbvv29fMElyk36ehEdqD14u8/Jtr02dM4cJW7aQ/cIFdhSyHhJ81CXHj0oFQCQFfF7/cyZsmcDe\nU3tvavwcpk6F7dvtCyZJ5kTMCQatHMTYRmNJZfyraz12jE8XLGDT00/T+t13icmQ4cZLdm7+pwIg\nkgLyZsnLgOoD6Lm4JzfmsXLntg6P6doVEpJsSy2xSf8V/enwbAeezf3srS+cOgX16rGmSBH6dO+O\nmerWbtfOzf9UAERSSMALARy9eJQFuxckNnbpYnX+kyfbF0we2Zq/1rB8/3KGeA259YXz56F+ffDx\nIcfQoQ63+Z9WAYmkoFUHVvHiNy+yq8cuMntkthp//RXq1bMOkn/CMZ8Ylbu7Fn+NchPLMbjGYFqV\nvOl4lLg4a5VXwYIwbhwYhm2b/2kZqIiDeDnsZXJlyMXn3jedI9ynDxw/DtOn2xdMHsoX679gWfQy\nlvovTXzWA6xVXnv2QEQEpE1rX0BUAEQcxomYE5QaV4ol/kso92Q5q/HiRShZEr76CmrVsjWf3L+D\n5w5SdkJZ1ndeT9GcRRNfmDDBOhd63brbtgC3g54DEHEQj2d6nOF1h9NlURfiEq5vDJc5MwQHWxPC\nV67YG1Duyz+nfAVVDLq189+yBd55B8LCHKLzvxcVABEbvPTcS2RLn42QjTdtDOfrCyVKwPDh9gWT\n+7Zg9wKiz0TTv1r/xMYzZ6BVK+tBv2LF7At3nzQEJGKTfaf2UXlyZba8toWC2QpajX/9BeXKwfr1\nULTovT9AbHM29iwlx5Zkbsu5VC1Q1Wo0TWjWDAoUsO7mHIiGgEQcTNGcReldqTc9FvdIfDagQAF4\n+23o0eOOB8mLY3hrxVs0LdY0sfMHGDMGjhyxzn1wEioAIjbqW7Uvf579k3m75iU2BgbCsWMwZ459\nweSu1vy1hu/2fnfrKV+7d8N770FoKHh42BfuAakAiNjII7UHE5tMpNfSXpy5fMZqTJvWWkXy5ptw\n9qy9AeUWV+Ku0GVRF4J9gnks/WNW49Wr8OKL8OGHTjdspzkAEQfQ7btuJJgJt+4f37UrpEqlg+Qd\nyHtR7/HL37+wsM3CxDX/AwdaD/MtWmQd+uOA9ByAiAP7Z1JxTos5VC9Y3Wo8cwaeecZaTlixor0B\nhd0ndlN9anW2dt3KU1mfshrXroUWLWDrVsiTx96A96BJYBEHli19Nkb7jKbzt511kLwDik+I59VF\nrzLEa0hi53/5MnTsaN2hOXDnfy8qACIOolmJZpTPW55BKwclNuogeYcQvDGYNKnS0L1C98TG996D\nMmWgeXP7gj0iDQGJOJCTl05SelxpFrReQJX8VazGvXuhShX4+WdrmaikqL2n9lJlchU2vroRzxye\nVuOWLdCwoXW2c+7c9ga8DxoCEnECuTLmYrTPaDqFd0ocCipWDHr3toaC9AUoRcUnxNMpvBODaw5O\n7PyvXYNOnazhOSfo/O9FBUDEwbR4pgXP5XmOwSsHJzb262c9ZDRzpn3B3FDwxmBSGano+ULPxMbh\nwyFvXmvpp5PTEJCIAzoRc4LS40qzsM1CKuevbDX+/DP4+DjNsIOz+2erjg2vbqBIjiJW465dULOm\nNQTkRMNxGgIScSKPZ3qcEJ8QOoZ3TBwKKlfOWnUSEGBvODcQnxBPx/CODK45OLHzj4+HV1+1Jn+d\nqPO/FxUAEQfVqmQrSucuzTuR7yQ2vvuu9dDRwoX2BXMDdxz6GTMG0qSx5mJchIaARBzYyUsneW78\nc0z3m06dwnWsxtWroW1b6wjJ7NntDeiCth/bTu3ptdnQeUPixO+ff8Lzz1sHvDjBNs//piEgESeU\nK2MupjSdQsfwjol7BVWvbm07/Oab9oZzQbFxsfh/48/wusMTO3/ThC5doG9fp+z870V3ACJOIGhJ\nEH/H/M2cFnOsPWguXIDSpWHiRKhf3+54LqP30t4cunCIuS3nJu71M3UqjB4NGzdaQ0BOSHcAIk5s\nWN1h7Dy+k5nbri8DzZLF2jH0tdesYiCP7Pvo75m/ez4TGk9I7PyPHoX+/WHKFKft/O9FdwAiTuLX\nv3+l7oy6bHp1E4WyF7IaO3aEdOlg/Hh7wzm5k5dOUmZ8Gab5TUucazFNa6O3EiXgo4/sDfiIdAcg\n4uSey/Mcb1V9iw4LOyQeJj9yJCxZYv0jD8U0TV5b9BptS7VN7PwBFiywDnoZNOjub3ZyKgAiTqR3\n5d5k8siU+JTwY49ZY9SvvgqnT9sbzkmN2zyOP87+wUe1b/qWf/q0dTLb5MmQPr194ZKZhoBEnMyJ\nmBOUm1iOiY0n4lPUx2rs1cs6RnL2bHvDOZnNRzbjE+rD+s7rEx/4Anj5ZciWDUaNsi9cEtIQkIiL\neDzT48xqPouO4R05dP6Q1fjxx9ahJDpH+L6djT1L63mtGdtw7K2d/9KlsGqV04/73w/dAYg4qWFr\nhvHd3u9Y+fJK0qZOCz/9BI0bwy+/WJuVyV2Zpknzuc3JnzU/wT7BiS9cuAClSsGkSVCvnn0Bk5ju\nAERcTL+q/ciaLisDIwdaDRUqQPfu0Lmzto2+h4jISEr0r8EPO9aze0k8EZGRiS++/TbUqeNSnf+9\n6A5AxImdvHSS5yc+z/B6w2ldsrW1V32VKvDKK9Cjh93xHE5EZCSvLfiCI/nWQdkxkOFJPENDGdWu\nHY3SpnXZLTZ0KLyIi9r691bqzajHig4reC7Pc7Bvn1UEVqyA556zO55DqdHrFVbnXgTF34IcFW60\nN5k3j2+yV6VEAAAL1klEQVRXrIBhw6xtNlyMhoBEXFSZPGUY7TMav6/9OHnpJBQtCiNGQJs2EBNj\ndzyHEXM1hp+zRMBTbW7p/AFeWrfO2m7bBTv/e1EBEHEBbUq1oW3JtrSa14pr8des06oqVdLZAdeZ\npknH8I5kjcsFT7W65TWvX36h5r591nbPbkYFQMRFfFj7QzKmzUjvZb0xTdPawGztWpg1y+5othu6\neigHzh1gTJ0ReN703yNLTAwzBg/mj4EDIUcOGxPaQ3MAIi7kXOw5qk2tRscyHXmj8hvWswH16sH6\n9VCkyC3XRkRGEhwWxhXDIJ1pEujnR6PatW1Knnxmb59NvxX92PjqRvJmyUtEZCQh4eHEAm+vWMHT\nhQpR8Lvv7I6ZrDQJLOImDp47SJUpVfi8/ufWyqCQEPjqK+tu4Pq2BhGRkQTNnk20v/+N991YDeNC\nRWDlHytpM78NP7z0A6Vzl771xUWLICjIOmEtSxZ7AqYQFQARN/Lr379Sb0Y95reeT40C1a3ljZky\nWXvbGAbegYF837z5be/zXriQpS6y/cH2Y9upM70OX7f8mlqFat364t9/W5O+c+ZAjRr2BExBWgUk\n4kaey/Mcoc1DaTWvFduP77A6/k2brANkgCvGbX0BALEpGTIZ/XXuLxrNakSwT/DtnX9CArz0kvXA\nnBt0/veiAiDioup51iO4QTDeM73ZE3vYOkh+0CDYsIF0d7mTdoV9L49cOEKd6XV4o/IbtC3V9vYL\nPvsMLl2Cd99N+XAORgVAxIW1KdWGoXWGUndGXf7Ilca6E2jVij41auAZGnrLtZ4zZxLg62tT0qRx\nPOY4dafXpVOZTvSq1Ov2CzZutApAaKhLnvD1oDQHIOIGxv40ls/WfcaPr/xI/i8mQWQkSwYOZNSS\nJcRiffMP8PV16gng05dPU2taLXyL+/J+rfdvv+DcOShb1ioAd5j/cGWaBBZxcyPWjyB4UzDL/ZdR\npOsAyJABpk+Hu8wHOJNjF4/RILQB9QrX45O6nySe6fuPhATw84MCBaznI9yMJoFF3Fzvyr15u9rb\n1Jxeix2f9oM9e+DDD+2O9cgOnD1A9anV8Svud+fOH6y/8/Rp+OKLlA/owDQIJuJGXiv/Glk8slBn\nQROWjJ9KuebdrQfE2rWzO9pD2X1iN94zvelTpQ+BFQPvfFFEhLX66aefwMMjZQM6OBUAETfTrnQ7\nsqTLgnf4y8wZNZA6XYIgTx6oVeu/3+xAVh1YRet5rfm03qd0eK7DnS/atw86doSwMHjyyZQN6AQ0\nByDipjYf2YzfHD+Gp/Gh3YfhGIsXw/PP2x3rvkz+eTIDIgcws9lM6nne5fCW06ehalXrad+uXVM2\noIPRJLCI3Obw+cM0ndMU//2Z6fXVb6RaGQUlStgd666uxl+l3/J+LN63mEXtFlE8V/E7X3jlCtSv\nbxW0zz9P2ZAOSAVARO7o0rVLBCwOINf8xXywEjzWrIf//c/uWLfZf2Y/bee3JXfm3Ezzm0aODHfZ\nvTMhATp0sIrA3LmQSmtdtApIRO4oY9qMTPadTMk+nzCowgXOVylPwu/77I51g2mazNo+i0qTKtG+\ndHu+bfvt3Tt/04R+/WD/fpgxQ53/f9AdgIjcsOfkHsLfaMjL3x3i0uJwClVqYGueg+cO0n1xd/48\n+ydTfafyfN7/mKMYPBjCw2HlSrfc3/9udAcgIv+peK7ivPnVXrb1aEV674YET3md81fOp3iO2LhY\nPl37KeUmluOFvC+w5bUt/935f/wxzJ8Py5er879PDnEHYBhGK2AI8DRQwTTNn+9yne4ARFLIqSmj\nSfNmX15pl5G6r7xP53KdSZ8mebeLi0uIY9b2WQxaOYiyecrySd1P7j7R+w/TtB70mj4dfvwR8uZN\n1ozOyKEngQ3DeBpIACYAb6oAiDiIFSu41q4NI1rn54tCf9PzhZ50e74bOTPmTNJfc/7KeSb/PJlR\nG0eR/7H8DKszjKoFqv73GxMSoHdvq+NfutR6nkFu49AF4B+GYaxEBUDEsezYAY0bc7ylDwOqxDJv\n7zfULlSb9qXa06hYIzKmzfhQH3sl7grfR3/PnJ1zWLxvMd6e3vSu1JuKT1W8zw+4Yu3p/9df8O23\nkC3bQ+VwByoAIvLw/v7bOlXMw4Nzk8bwzak1zNoxi/UH1/N83uepWbAmz+Z+lpJPlCRflnxk9sh8\ny548l69d5tD5Q+w+uZttx7ax+q/VrD+4njJ5ytCmZBtaPtOS3Jlz33+eo0etHT3z5bNW+2TIkAx/\ntOuwvQAYhrEcuNP92QDTNBddv0YFQMRRxcVZq2xmzIBp06B2bS5evciav9aw+sBqdpzYwc7jOzl6\n8SimaZI+TXoMwyA2Lpb4hHiezPIkJXKVoOTjJalWoBrVC1a/+3LOe1m1Cvz9rad7Bwxwid1Mk5vt\nBeB+3E8BePemU3y8vLzw8vJKoXQiAlhj7V26QMOGMHw4PPbYbZdcvHqRK3FXMLEKQaa0me68S+eD\nuHrVOsVr2jTrYBsfn0f7PBcWFRVFVFTUjZ/fe+89pykAfUzT3HKX13UHIOIIzp2Dvn1hyRJr+WX7\n9sn70FVUFPToAZ6eMGkSPPFE8v0uF+TQdwCGYTQDgoFcwDngF9M0byvvKgAiDmb1aqsQxMZahaBB\ng6Qdktm1C957DzZsgJEjrUNdNOTzwBy6ANwvFQARB2Sa1oHzgwdbnXNQELRpA1myPNznJSRYyzrH\njrXG+994A3r2hEyZkja3G1EBEJHkZZqwYoV15GJUFNStC40bQ40aULjwvb+5x8TA+vXW/MLChVZn\n36WLtZd/5swp9ie4KhUAEUk5Z85YHfny5dYw0eXL1vh9wYJWh54uHVy8CKdOWYe2HDkCZcpYQ0iN\nG1uHt2uoJ8moAIiIPUwTTpyA6Gg4cAAuXbIe4sqaFbJnh0KFoGhRSKMDCpOLCoCIiJvSbqAiInIL\nFQARETelAiAi4qZUAERE3JQKgIiIm1IBEBFxUyoAIiJuSk9eiEiKi4iMJDgsjCuGQTrTJNDPj0a1\na9sdy+2oAIhIioqIjCRo9myi/f1vtEWHhgKoCKQwDQGJSIoKDgu7pfMHiPb3JyQ83KZE7ksFQERS\n1JW7bPIWm8I5RAVARFJYurvs55U+hXOICoCIpLBAPz88r4/5/8Nz5kwCfH1tSuS+tBuoiKS4iMhI\nQsLDicX65h/g66sJ4GSk7aBFRNyUtoMWEZFbqACIiLgpFQARETelAiAi4qZUAERE3JQKgIiIm1IB\nEBFxUyoAIiJuSgVARMRNqQCIiLgpFYB7iIqKsjuCiLggR+lbVADuwVH+J4mIa3GUvkUFQETETakA\niIi4KafbDtruDCIizsjpzwMQEZGkoyEgERE3pQIgIuKmVADuwDCMBoZh/GYYxj7DMPrbnUdEXINh\nGFMMwzhmGMZ2u7OACsBtDMNIDYwGGgDPAO0MwyhhbyoRcRFTsfoWh6ACcLsXgN9N0/zTNM1rwBzA\n1+ZMIuICTNNcDZyxO8c/VABulw84eNPPh663iYi4FBWA22ldrIi4BRWA2x0G8t/0c36suwAREZei\nAnC7zUBRwzD+ZxiGB9AG+NbmTCIiSU4F4F9M04wDegLLgF3A16Zp7rY3lYi4AsMwZgPrgGKGYRw0\nDKOjrXm0FYSIiHvSHYCIiJtSARARcVMqACIibkoFQETETakAiIi4KRUAERE3pQIgIuKmVABERNyU\nCoCIiJtSARARcVMqACIibiqN3QFEnJVhGMWA6kAOIB64DJQANpmmOdPObCL3QwVA5CEYhmEADUzT\nDDYM4wlgP9bZEa8Dp2wNJ3KftBuoyEMwDCMVkNE0zYuGYfgBr5qm2djuXCIPQncAIg/BNM0E4OL1\nH32wzo/AMIy0QCrTNK/YlU3kfmkSWOQhGIZRwTCMLwzDSAc0BjZef+llIK19yUTun4aARB6CYRh1\ngM7ABuACUBLrBLmdpmluvNd7RRyFCoCIiJvSEJCIiJtSARARcVMqACIibkoFQETETakAiIi4KRUA\nERE3pQIgIuKmVABERNyUCoCIiJv6P54s7haydNGJAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa7b05c1c10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def phi(x, M):\n",
    "    return x[:,None] ** np.arange(M + 1)\n",
    "\n",
    "# 加正则项的解\n",
    "M = 9\n",
    "lam = 0.0001\n",
    "\n",
    "phi_x_tr = phi(x_tr, M)\n",
    "S_0 = phi_x_tr.T.dot(phi_x_tr) + lam * np.eye(M+1)\n",
    "y_0 = t_tr.dot(phi_x_tr)\n",
    "\n",
    "coeff = np.linalg.solve(S_0, y_0)[::-1]\n",
    "\n",
    "f = np.poly1d(coeff)\n",
    "\n",
    "# 绘图\n",
    "\n",
    "xx = np.linspace(0, 1, 500)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "ax.plot(x_tr, t_tr, 'co')\n",
    "ax.plot(xx, np.sin(2 * np.pi * xx), 'g')\n",
    "ax.plot(xx, f(xx), 'r')\n",
    "ax.set_xlim(-0.1, 1.1)\n",
    "ax.set_ylim(-1.5, 1.5)\n",
    "ax.set_xticks([0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "ax.set_xlabel(\"$x$\", fontsize=\"x-large\")\n",
    "ax.set_ylabel(\"$t$\", fontsize=\"x-large\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通常情况下，如果我们需要决定我们系统的复杂度参数 ($\\lambda, M$)，一个常用的方法是从训练数据中拿出一小部分作为验证集，来测试我们的复杂度；不过这样会带来训练减少的问题。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
